diff --git a/NEWS b/NEWS
index 94f1bf4..c78d1d1 100644
--- a/NEWS
+++ b/NEWS
@@ -1,3 +1,6 @@
+Major changes in 3.26.3.1:
+* Revert accidental backports of behavioral and visual changes
+
 Major changes in 3.26.3:
 * Don’t strip extension from folders in compress dialog (Rahul Verma)
 * Fix items not being focused when selected in list view (António Fernandes)
diff --git a/debian/changelog b/debian/changelog
index 30d5e5b..5ec2f23 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -1,3 +1,24 @@
+nautilus (1:3.26.3.1~ubuntu18.04.1) UNRELEASED; urgency=medium
+
+  [ Sebastien Bacher ]
+  * debian/patches/git_middle_tab.patch:
+    - don't close the view when middle clicking on an item in the
+      "other locations" (lp: #1765776)
+
+  [ Marco Trevisan (Treviño) ]
+  * New upstream release: 3.26.3.1
+  * debian/patches/query-add-recursive-flags-and-use-it-in-search-engines.patch,
+    debian/patches/0016-search-engine-add-a-recent-search-engine-listing-Gtk.patch,
+    debian/patches/0018-search-engine-add-locate-based-search-engine.patch:
+    - Follow nautilus settings to search only in current folder (LP: #1767027).
+      This doesn't apply to gnome-shell search provider for indexed searches.
+  * debian/patches/0017-recent-add-function-to-update-manager-on-file-rename.patch:
+    - Updated to respect upstream requested changes
+  * debian/patches/nautilusgtkplacesview-show-error-if-volume-is-not-mounted.patch:
+    - don't crash if selecting a volume that is not mounted (LP: #1764779)
+
+ -- Sebastien Bacher <seb128@ubuntu.com>  Mon, 30 Apr 2018 16:12:53 +0200
+
 nautilus (1:3.26.3-0ubuntu4) bionic; urgency=medium
 
   * debian/patches/server_list_segfault.patch,
diff --git a/debian/control.in b/debian/control.in
index 0d5ed26..19b2ec4 100644
--- a/debian/control.in
+++ b/debian/control.in
@@ -33,7 +33,10 @@ Build-Depends: debhelper (>= 10.3),
                libunity-dev (>= 5.0.0),
                libzeitgeist-2.0-dev,
 Homepage: https://wiki.gnome.org/action/show/Apps/Nautilus
-Vcs-Bzr: http://code.launchpad.net/~ubuntu-desktop/nautilus/ubuntu
+XS-Debian-Vcs-Browser: https://salsa.debian.org/gnome-team/nautilus
+XS-Debian-Vcs-Git: https://salsa.debian.org/gnome-team/nautilus.git
+Vcs-Browser: https://git.launchpad.net/~ubuntu-desktop/ubuntu/+source/nautilus
+Vcs-Git: https://git.launchpad.net/~ubuntu-desktop/ubuntu/+source/nautilus -b ubuntu/bionic
 Standards-Version: 3.9.8
 
 Package: nautilus
diff --git a/debian/patches/0016-search-engine-add-a-recent-search-engine-listing-Gtk.patch b/debian/patches/0016-search-engine-add-a-recent-search-engine-listing-Gtk.patch
index 1a4ee1c..0ec13f1 100644
--- a/debian/patches/0016-search-engine-add-a-recent-search-engine-listing-Gtk.patch
+++ b/debian/patches/0016-search-engine-add-a-recent-search-engine-listing-Gtk.patch
@@ -7,19 +7,19 @@ Using GtkRecent items as search engine source in nautilus
 ---
  src/meson.build                     |   2 +
  src/nautilus-file.h                 |   1 +
- src/nautilus-search-engine-recent.c | 385 ++++++++++++++++++++++++++++++++++++
- src/nautilus-search-engine-recent.h |  36 ++++
- src/nautilus-search-engine.c        |  11 ++
- 5 files changed, 435 insertions(+)
+ src/nautilus-search-engine-recent.c | 427 ++++++++++++++++++++++++++++++++++++
+ src/nautilus-search-engine-recent.h |  36 +++
+ src/nautilus-search-engine.c        |  11 +
+ 5 files changed, 477 insertions(+)
  create mode 100644 src/nautilus-search-engine-recent.c
  create mode 100644 src/nautilus-search-engine-recent.h
 
 diff --git a/src/meson.build b/src/meson.build
-index a771d12..0ea9165 100644
+index 73aafe9..213b35f 100644
 --- a/src/meson.build
 +++ b/src/meson.build
-@@ -228,6 +228,8 @@ libnautilus_sources = [
-     'nautilus-search-engine.h',
+@@ -229,6 +229,8 @@ libnautilus_sources = [
+     'nautilus-search-engine-private.h',
      'nautilus-search-engine-model.c',
      'nautilus-search-engine-model.h',
 +    'nautilus-search-engine-recent.c',
@@ -28,7 +28,7 @@ index a771d12..0ea9165 100644
      'nautilus-search-engine-simple.h',
      'nautilus-search-hit.c',
 diff --git a/src/nautilus-file.h b/src/nautilus-file.h
-index 3a83bd4..fd72d7a 100644
+index af8c003..20ec6f3 100644
 --- a/src/nautilus-file.h
 +++ b/src/nautilus-file.h
 @@ -49,6 +49,7 @@ typedef struct NautilusFile NautilusFile;
@@ -41,10 +41,10 @@ index 3a83bd4..fd72d7a 100644
  	NAUTILUS_FILE_SORT_NONE,
 diff --git a/src/nautilus-search-engine-recent.c b/src/nautilus-search-engine-recent.c
 new file mode 100644
-index 0000000..f052e8f
+index 0000000..bbd0d82
 --- /dev/null
 +++ b/src/nautilus-search-engine-recent.c
-@@ -0,0 +1,385 @@
+@@ -0,0 +1,427 @@
 +/*
 + * Copyright (C) 2018 Canonical Ltd
 + *
@@ -69,6 +69,7 @@ index 0000000..f052e8f
 +#include "nautilus-search-hit.h"
 +#include "nautilus-search-provider.h"
 +#include "nautilus-search-engine-recent.h"
++#include "nautilus-search-engine-private.h"
 +#include "nautilus-ui-utilities.h"
 +#define DEBUG_FLAG NAUTILUS_DEBUG_SEARCH
 +#include "nautilus-debug.h"
@@ -161,6 +162,51 @@ index 0000000..f052e8f
 +    return FALSE;
 +}
 +
++static gboolean
++is_file_valid_recursive (NautilusSearchEngineRecent *self,
++                         GFile                      *file,
++                         GError                    **error)
++{
++    g_autofree gchar *path = NULL;
++    g_autoptr (GFileInfo) file_info = NULL;
++
++    file_info = g_file_query_info (file, FILE_ATTRIBS,
++                                   G_FILE_QUERY_INFO_NONE,
++                                   self->cancellable, error);
++    if (*error != NULL)
++    {
++        return FALSE;
++    }
++
++    if (!g_file_info_get_attribute_boolean (file_info,
++                                            G_FILE_ATTRIBUTE_ACCESS_CAN_READ))
++    {
++        return FALSE;
++    }
++
++    path = g_file_get_path (file);
++
++    if (!nautilus_query_get_show_hidden_files (self->query))
++    {
++        if (!g_file_info_get_is_hidden (file_info) &&
++            !g_file_info_get_is_backup (file_info))
++        {
++            g_autoptr (GFile) parent = g_file_get_parent (file);
++
++            if (parent)
++            {
++                return is_file_valid_recursive (self, parent, error);
++            }
++        }
++        else
++        {
++            return FALSE;
++        }
++    }
++
++    return TRUE;
++}
++
 +static gpointer
 +recent_thread_func (gpointer user_data)
 +{
@@ -199,44 +245,24 @@ index 0000000..f052e8f
 +
 +        if (gtk_recent_info_is_local (info))
 +        {
-+            g_autofree gchar *path = NULL;
-+            g_autoptr (GFileInfo) file_info = NULL;
 +            g_autoptr (GError) error = NULL;
 +
-+            file_info = g_file_query_info (file, FILE_ATTRIBS,
-+                                           G_FILE_QUERY_INFO_NONE,
-+                                           self->cancellable, &error);
-+            if (error != NULL)
++            if (!is_file_valid_recursive (self, file, &error))
 +            {
 +                if (g_error_matches (error, G_IO_ERROR, G_IO_ERROR_CANCELLED))
 +                {
 +                    break;
 +                }
 +
-+                if (!g_error_matches (error, G_IO_ERROR, G_IO_ERROR_EXISTS))
++                if (error != NULL &&
++                    !g_error_matches (error, G_IO_ERROR, G_IO_ERROR_EXISTS))
 +                {
-+                    g_debug("Impossible to read locate file info: %s",
++                    g_debug("Impossible to read recent file info: %s",
 +                            error->message);
 +                }
 +
 +                continue;
 +            }
-+
-+            if (!g_file_info_get_attribute_boolean (file_info,
-+                                                    G_FILE_ATTRIBUTE_ACCESS_CAN_READ))
-+            {
-+                continue;
-+            }
-+
-+            path = g_file_get_path (file);
-+
-+            if (!nautilus_query_get_show_hidden_files (self->query) &&
-+                (g_file_info_get_is_hidden (file_info) ||
-+                 g_file_info_get_is_backup (file_info) ||
-+                 g_strrstr (path, G_DIR_SEPARATOR_S ".") != NULL))
-+            {
-+                continue;
-+            }
 +        }
 +
 +        if (g_cancellable_is_cancelled (self->cancellable))
@@ -333,6 +359,7 @@ index 0000000..f052e8f
 +nautilus_search_engine_recent_start (NautilusSearchProvider *provider)
 +{
 +    NautilusSearchEngineRecent *self = NAUTILUS_SEARCH_ENGINE_RECENT (provider);
++    g_autoptr (GFile) location = NULL;
 +    GThread *thread;
 +
 +    g_return_if_fail (self->query);
@@ -340,6 +367,21 @@ index 0000000..f052e8f
 +
 +    g_object_ref (self);
 +    g_object_ref (self->query);
++
++    location = nautilus_query_get_location (self->query);
++
++    if (!is_recursive_search (NAUTILUS_SEARCH_ENGINE_TYPE_INDEXED,
++                              nautilus_query_get_recursive (self->query),
++                              location))
++    {
++        SearchHitsData *search_hits;
++        search_hits = g_new0 (SearchHitsData, 1);
++        search_hits->recent = self;
++
++        g_idle_add (search_thread_add_hits_idle, search_hits);
++        return;
++    }
++
 +    self->cancellable = g_cancellable_new ();
 +
 +    thread = g_thread_new ("nautilus-search-recent", recent_thread_func, self);
@@ -473,18 +515,18 @@ index 0000000..bcd73b9
 +
 +#endif /* __NAUTILUS_SEARCH_ENGINE_RECENT_H__ */
 diff --git a/src/nautilus-search-engine.c b/src/nautilus-search-engine.c
-index 209bd4f..aef91b7 100644
+index a545160..68b6a4d 100644
 --- a/src/nautilus-search-engine.c
 +++ b/src/nautilus-search-engine.c
-@@ -24,6 +24,7 @@
- #include <glib/gi18n.h>
- #include "nautilus-search-provider.h"
+@@ -21,6 +21,7 @@
+ 
+ #include <config.h>
  #include "nautilus-search-engine.h"
 +#include "nautilus-search-engine-recent.h"
  #include "nautilus-search-engine-simple.h"
- #include "nautilus-search-engine-model.h"
- #define DEBUG_FLAG NAUTILUS_DEBUG_SEARCH
-@@ -33,6 +34,7 @@
+ #include "nautilus-search-engine-private.h"
+ 
+@@ -35,6 +36,7 @@
  typedef struct
  {
      NautilusSearchEngineTracker *tracker;
@@ -492,7 +534,7 @@ index 209bd4f..aef91b7 100644
      NautilusSearchEngineSimple *simple;
      NautilusSearchEngineModel *model;
  
-@@ -74,6 +76,7 @@ nautilus_search_engine_set_query (NautilusSearchProvider *provider,
+@@ -76,6 +78,7 @@ nautilus_search_engine_set_query (NautilusSearchProvider *provider,
      priv = nautilus_search_engine_get_instance_private (engine);
  
      nautilus_search_provider_set_query (NAUTILUS_SEARCH_PROVIDER (priv->tracker), query);
@@ -500,7 +542,7 @@ index 209bd4f..aef91b7 100644
      nautilus_search_provider_set_query (NAUTILUS_SEARCH_PROVIDER (priv->model), query);
      nautilus_search_provider_set_query (NAUTILUS_SEARCH_PROVIDER (priv->simple), query);
  }
-@@ -98,6 +101,9 @@ search_engine_start_real (NautilusSearchEngine *engine)
+@@ -100,6 +103,9 @@ search_engine_start_real (NautilusSearchEngine *engine)
      nautilus_search_provider_start (NAUTILUS_SEARCH_PROVIDER (priv->tracker));
      priv->providers_running++;
  
@@ -510,7 +552,7 @@ index 209bd4f..aef91b7 100644
      if (nautilus_search_engine_model_get_model (priv->model))
      {
          nautilus_search_provider_start (NAUTILUS_SEARCH_PROVIDER (priv->model));
-@@ -159,6 +165,7 @@ nautilus_search_engine_stop (NautilusSearchProvider *provider)
+@@ -161,6 +167,7 @@ nautilus_search_engine_stop (NautilusSearchProvider *provider)
      DEBUG ("Search engine stop");
  
      nautilus_search_provider_stop (NAUTILUS_SEARCH_PROVIDER (priv->tracker));
@@ -518,7 +560,7 @@ index 209bd4f..aef91b7 100644
      nautilus_search_provider_stop (NAUTILUS_SEARCH_PROVIDER (priv->model));
      nautilus_search_provider_stop (NAUTILUS_SEARCH_PROVIDER (priv->simple));
  
-@@ -334,6 +341,7 @@ nautilus_search_engine_finalize (GObject *object)
+@@ -336,6 +343,7 @@ nautilus_search_engine_finalize (GObject *object)
      g_hash_table_destroy (priv->uris);
  
      g_clear_object (&priv->tracker);
@@ -526,7 +568,7 @@ index 209bd4f..aef91b7 100644
      g_clear_object (&priv->model);
      g_clear_object (&priv->simple);
  
-@@ -395,6 +403,9 @@ nautilus_search_engine_init (NautilusSearchEngine *engine)
+@@ -397,6 +405,9 @@ nautilus_search_engine_init (NautilusSearchEngine *engine)
  
      priv->simple = nautilus_search_engine_simple_new ();
      connect_provider_signals (engine, NAUTILUS_SEARCH_PROVIDER (priv->simple));
diff --git a/debian/patches/0017-recent-add-function-to-update-manager-on-file-rename.patch b/debian/patches/0017-recent-add-function-to-update-manager-on-file-rename.patch
index 99abe37..d0125f5 100644
--- a/debian/patches/0017-recent-add-function-to-update-manager-on-file-rename.patch
+++ b/debian/patches/0017-recent-add-function-to-update-manager-on-file-rename.patch
@@ -1,5 +1,5 @@
 From: =?utf-8?b?Ik1hcmNvIFRyZXZpc2FuIChUcmV2acOxbyki?= <mail@3v1n0.net>
-Date: Wed, 11 Apr 2018 18:51:34 -0400
+Date: Thu, 12 Apr 2018 00:51:34 +0200
 Subject: recent: add function to update manager on file rename or move
 
 When files have been moved or renamed nautilus should inform
@@ -7,10 +7,10 @@ recent manager about this change for the files that
 are listed there.
 ---
  src/nautilus-directory.c |   8 +++
- src/nautilus-file.c      |  25 +++++-----
- src/nautilus-recent.c    | 126 +++++++++++++++++++++++++++++++++++++++++++++++
+ src/nautilus-file.c      |  25 +++++----
+ src/nautilus-recent.c    | 132 +++++++++++++++++++++++++++++++++++++++++++++++
  src/nautilus-recent.h    |   8 ++-
- 4 files changed, 152 insertions(+), 15 deletions(-)
+ 4 files changed, 158 insertions(+), 15 deletions(-)
 
 diff --git a/src/nautilus-directory.c b/src/nautilus-directory.c
 index ad3bb03..f1a3bf8 100644
@@ -49,7 +49,7 @@ index ad3bb03..f1a3bf8 100644
  
      /* Now send out the changed and added signals for existing file objects. */
 diff --git a/src/nautilus-file.c b/src/nautilus-file.c
-index 2135801..15e5d05 100644
+index e862c13..21846d0 100644
 --- a/src/nautilus-file.c
 +++ b/src/nautilus-file.c
 @@ -34,6 +34,7 @@
@@ -128,17 +128,18 @@ index 2135801..15e5d05 100644
  
  static void
 diff --git a/src/nautilus-recent.c b/src/nautilus-recent.c
-index ab50fef..c69a3a7 100644
+index ab50fef..6676465 100644
 --- a/src/nautilus-recent.c
 +++ b/src/nautilus-recent.c
-@@ -1,5 +1,6 @@
+@@ -1,5 +1,7 @@
  /*
   * Copyright (C) 2002 James Willcox
 + * Copyright (C) 2018 Canonical Ltd
++ * Copyright (C) 2018 Marco Trevisan
   *
   * This program is free software; you can redistribute it and/or modify
   * it under the terms of the GNU General Public License as published by
-@@ -17,6 +18,7 @@
+@@ -17,6 +19,7 @@
  
  #include "config.h"
  #include "nautilus-recent.h"
@@ -146,16 +147,16 @@ index ab50fef..c69a3a7 100644
  
  #include <eel/eel-vfs-extensions.h>
  
-@@ -85,3 +87,127 @@ nautilus_recent_add_file (NautilusFile *file,
+@@ -85,3 +88,132 @@ nautilus_recent_add_file (NautilusFile *file,
  
      g_free (uri);
  }
 +
 +void
-+nautilus_recent_update_file_moved (const gchar   *old_uri,
-+                                   const gchar   *new_uri,
-+                                   const gchar   *old_display_name,
-+                                   const gchar   *new_display_name)
++nautilus_recent_update_file_moved (const gchar *old_uri,
++                                   const gchar *new_uri,
++                                   const gchar *old_display_name,
++                                   const gchar *new_display_name)
 +{
 +    GtkRecentManager *recent_manager = nautilus_recent_get_manager ();
 +    g_autoptr (NautilusFile) file = NULL;
@@ -191,9 +192,11 @@ index ab50fef..c69a3a7 100644
 +
 +    if (nautilus_file_is_directory (file))
 +    {
++        g_autoptr (GFile) location = NULL;
 +        GList *recent_items;
 +        GList *l;
 +
++        location = g_file_new_for_uri (old_uri);
 +        recent_items = gtk_recent_manager_get_items (recent_manager);
 +
 +        for (l = recent_items; l; l = l->next)
@@ -203,9 +206,12 @@ index ab50fef..c69a3a7 100644
 +
 +            if (g_str_has_prefix (item_uri, old_uri))
 +            {
-+                const gchar *relative_path = item_uri + strlen (old_uri);
++                g_autoptr (GFile) item_file = NULL;
++                g_autofree gchar *relative_path = NULL;
 +                g_autofree gchar *new_item_uri = NULL;
 +
++                item_file = g_file_new_for_uri (item_uri);
++                relative_path = g_file_get_relative_path (location, item_file);
 +                new_item_uri = g_build_filename (new_uri, relative_path, NULL);
 +
 +                gtk_recent_manager_move_item (recent_manager,
diff --git a/debian/patches/0018-search-engine-add-locate-based-search-engine.patch b/debian/patches/0018-search-engine-add-locate-based-search-engine.patch
index 5140963..c0d37b9 100644
--- a/debian/patches/0018-search-engine-add-locate-based-search-engine.patch
+++ b/debian/patches/0018-search-engine-add-locate-based-search-engine.patch
@@ -7,19 +7,19 @@ command line and parsing output to provide more and
 quicker results to the shell and nautilus
 ---
  src/meson.build                     |   2 +
- src/nautilus-search-engine-locate.c | 597 ++++++++++++++++++++++++++++++++++++
+ src/nautilus-search-engine-locate.c | 601 ++++++++++++++++++++++++++++++++++++
  src/nautilus-search-engine-locate.h |  37 +++
  src/nautilus-search-engine.c        |  11 +
- 4 files changed, 647 insertions(+)
+ 4 files changed, 651 insertions(+)
  create mode 100644 src/nautilus-search-engine-locate.c
  create mode 100644 src/nautilus-search-engine-locate.h
 
 diff --git a/src/meson.build b/src/meson.build
-index 0ea9165..06e6633 100644
+index 213b35f..a0bf109 100644
 --- a/src/meson.build
 +++ b/src/meson.build
-@@ -228,6 +228,8 @@ libnautilus_sources = [
-     'nautilus-search-engine.h',
+@@ -229,6 +229,8 @@ libnautilus_sources = [
+     'nautilus-search-engine-private.h',
      'nautilus-search-engine-model.c',
      'nautilus-search-engine-model.h',
 +    'nautilus-search-engine-locate.c',
@@ -29,10 +29,10 @@ index 0ea9165..06e6633 100644
      'nautilus-search-engine-simple.c',
 diff --git a/src/nautilus-search-engine-locate.c b/src/nautilus-search-engine-locate.c
 new file mode 100644
-index 0000000..16f9f21
+index 0000000..d152a23
 --- /dev/null
 +++ b/src/nautilus-search-engine-locate.c
-@@ -0,0 +1,597 @@
+@@ -0,0 +1,601 @@
 +/*
 + * Copyright (C) 2018 Canonical Ltd
 + *
@@ -57,6 +57,7 @@ index 0000000..16f9f21
 +#include "nautilus-search-hit.h"
 +#include "nautilus-search-provider.h"
 +#include "nautilus-search-engine-locate.h"
++#include "nautilus-search-engine-private.h"
 +#include "nautilus-ui-utilities.h"
 +#define DEBUG_FLAG NAUTILUS_DEBUG_SEARCH
 +#include "nautilus-debug.h"
@@ -452,7 +453,12 @@ index 0000000..16f9f21
 +    sdata = g_new0 (LocateSearchData, 1);
 +    sdata->locate = g_object_ref (self);
 +
-+    if (!(self->locate_features & LOCATE_INSTALLED))
++    query_location = nautilus_query_get_location (self->query);
++
++    if (!(self->locate_features & LOCATE_INSTALLED) ||
++        !is_recursive_search (NAUTILUS_SEARCH_ENGINE_TYPE_INDEXED,
++                              nautilus_query_get_recursive (self->query),
++                              query_location))
 +    {
 +        g_idle_add ((GSourceFunc) submit_results, sdata);
 +        return;
@@ -493,8 +499,6 @@ index 0000000..16f9f21
 +        return;
 +    }
 +
-+    query_location = nautilus_query_get_location (self->query);
-+
 +    sdata->query = g_object_ref (self->query);
 +    sdata->date_range = nautilus_query_get_date_range (self->query);
 +    sdata->mime_types = nautilus_query_get_mime_types (self->query);
@@ -674,18 +678,18 @@ index 0000000..ac5e3fc
 +
 +#endif /* __NAUTILUS_SEARCH_ENGINE_LOCATE_H__ */
 diff --git a/src/nautilus-search-engine.c b/src/nautilus-search-engine.c
-index aef91b7..bf0e85d 100644
+index 68b6a4d..84a88fa 100644
 --- a/src/nautilus-search-engine.c
 +++ b/src/nautilus-search-engine.c
-@@ -25,6 +25,7 @@
- #include "nautilus-search-provider.h"
+@@ -22,6 +22,7 @@
+ #include <config.h>
  #include "nautilus-search-engine.h"
  #include "nautilus-search-engine-recent.h"
 +#include "nautilus-search-engine-locate.h"
  #include "nautilus-search-engine-simple.h"
- #include "nautilus-search-engine-model.h"
- #define DEBUG_FLAG NAUTILUS_DEBUG_SEARCH
-@@ -35,6 +36,7 @@ typedef struct
+ #include "nautilus-search-engine-private.h"
+ 
+@@ -37,6 +38,7 @@ typedef struct
  {
      NautilusSearchEngineTracker *tracker;
      NautilusSearchEngineRecent *recent;
@@ -693,7 +697,7 @@ index aef91b7..bf0e85d 100644
      NautilusSearchEngineSimple *simple;
      NautilusSearchEngineModel *model;
  
-@@ -77,6 +79,7 @@ nautilus_search_engine_set_query (NautilusSearchProvider *provider,
+@@ -79,6 +81,7 @@ nautilus_search_engine_set_query (NautilusSearchProvider *provider,
  
      nautilus_search_provider_set_query (NAUTILUS_SEARCH_PROVIDER (priv->tracker), query);
      nautilus_search_provider_set_query (NAUTILUS_SEARCH_PROVIDER (priv->recent), query);
@@ -701,7 +705,7 @@ index aef91b7..bf0e85d 100644
      nautilus_search_provider_set_query (NAUTILUS_SEARCH_PROVIDER (priv->model), query);
      nautilus_search_provider_set_query (NAUTILUS_SEARCH_PROVIDER (priv->simple), query);
  }
-@@ -104,6 +107,9 @@ search_engine_start_real (NautilusSearchEngine *engine)
+@@ -106,6 +109,9 @@ search_engine_start_real (NautilusSearchEngine *engine)
      priv->providers_running++;
      nautilus_search_provider_start (NAUTILUS_SEARCH_PROVIDER (priv->recent));
  
@@ -711,7 +715,7 @@ index aef91b7..bf0e85d 100644
      if (nautilus_search_engine_model_get_model (priv->model))
      {
          nautilus_search_provider_start (NAUTILUS_SEARCH_PROVIDER (priv->model));
-@@ -166,6 +172,7 @@ nautilus_search_engine_stop (NautilusSearchProvider *provider)
+@@ -168,6 +174,7 @@ nautilus_search_engine_stop (NautilusSearchProvider *provider)
  
      nautilus_search_provider_stop (NAUTILUS_SEARCH_PROVIDER (priv->tracker));
      nautilus_search_provider_stop (NAUTILUS_SEARCH_PROVIDER (priv->recent));
@@ -719,7 +723,7 @@ index aef91b7..bf0e85d 100644
      nautilus_search_provider_stop (NAUTILUS_SEARCH_PROVIDER (priv->model));
      nautilus_search_provider_stop (NAUTILUS_SEARCH_PROVIDER (priv->simple));
  
-@@ -342,6 +349,7 @@ nautilus_search_engine_finalize (GObject *object)
+@@ -344,6 +351,7 @@ nautilus_search_engine_finalize (GObject *object)
  
      g_clear_object (&priv->tracker);
      g_clear_object (&priv->recent);
@@ -727,7 +731,7 @@ index aef91b7..bf0e85d 100644
      g_clear_object (&priv->model);
      g_clear_object (&priv->simple);
  
-@@ -406,6 +414,9 @@ nautilus_search_engine_init (NautilusSearchEngine *engine)
+@@ -408,6 +416,9 @@ nautilus_search_engine_init (NautilusSearchEngine *engine)
  
      priv->recent = nautilus_search_engine_recent_new ();
      connect_provider_signals (engine, NAUTILUS_SEARCH_PROVIDER (priv->recent));
diff --git a/debian/patches/git_middle_tab.patch b/debian/patches/git_middle_tab.patch
new file mode 100644
index 0000000..28d7bce
--- /dev/null
+++ b/debian/patches/git_middle_tab.patch
@@ -0,0 +1,78 @@
+Subject: [PATCH] notebook: Fix tab lookup by coordinates
+
+The current code only checks one coordinate, depending on the tab
+orientation.
+
+Fixes https://gitlab.gnome.org/GNOME/nautilus/issues/342
+
+
+(cherry picked from commit 7ca2197ae3f0df527e27cf58188b1f83216e3cdb)
+---
+ src/nautilus-notebook.c | 22 ++++++++--------------
+ 1 file changed, 8 insertions(+), 14 deletions(-)
+
+diff --git a/src/nautilus-notebook.c b/src/nautilus-notebook.c
+index f2b3fbd..6e1db52 100644
+--- a/src/nautilus-notebook.c
++++ b/src/nautilus-notebook.c
+@@ -88,14 +88,11 @@ find_tab_num_at_pos (NautilusNotebook *notebook,
+                      gint              abs_x,
+                      gint              abs_y)
+ {
+-    GtkPositionType tab_pos;
+     int page_num = 0;
+     GtkNotebook *nb = GTK_NOTEBOOK (notebook);
+     GtkWidget *page;
+     GtkAllocation allocation;
+ 
+-    tab_pos = gtk_notebook_get_tab_pos (GTK_NOTEBOOK (notebook));
+-
+     while ((page = gtk_notebook_get_nth_page (nb, page_num)))
+     {
+         GtkWidget *tab;
+@@ -118,15 +115,7 @@ find_tab_num_at_pos (NautilusNotebook *notebook,
+         max_x = x_root + allocation.x + allocation.width;
+         max_y = y_root + allocation.y + allocation.height;
+ 
+-        if (((tab_pos == GTK_POS_TOP)
+-             || (tab_pos == GTK_POS_BOTTOM))
+-            && (abs_x <= max_x))
+-        {
+-            return page_num;
+-        }
+-        else if (((tab_pos == GTK_POS_LEFT)
+-                  || (tab_pos == GTK_POS_RIGHT))
+-                 && (abs_y <= max_y))
++        if (abs_x <= max_x && abs_y <= max_y)
+         {
+             return page_num;
+         }
+@@ -154,7 +143,7 @@ button_press_cb (NautilusNotebook *notebook,
+             /* consume event, so that we don't pop up the context menu when
+              * the mouse if not over a tab label
+              */
+-            return TRUE;
++            return GDK_EVENT_STOP;
+         }
+ 
+         /* switch to the page the mouse is over, but don't consume the event */
+@@ -165,11 +154,16 @@ button_press_cb (NautilusNotebook *notebook,
+     {
+         GtkWidget *slot;
+ 
++        if (tab_clicked == -1)
++        {
++            return GDK_EVENT_PROPAGATE;
++        }
++
+         slot = gtk_notebook_get_nth_page (GTK_NOTEBOOK (notebook), tab_clicked);
+         g_signal_emit (notebook, signals[TAB_CLOSE_REQUEST], 0, slot);
+     }
+ 
+-    return FALSE;
++    return GDK_EVENT_PROPAGATE;
+ }
+ 
+ static void
+--
+
diff --git a/debian/patches/nautilusgtkplacesview-show-error-if-volume-is-not-mounted.patch b/debian/patches/nautilusgtkplacesview-show-error-if-volume-is-not-mounted.patch
new file mode 100644
index 0000000..37081f7
--- /dev/null
+++ b/debian/patches/nautilusgtkplacesview-show-error-if-volume-is-not-mounted.patch
@@ -0,0 +1,45 @@
+From: =?utf-8?b?Ik1hcmNvIFRyZXZpc2FuIChUcmV2acOxbyki?= <mail@3v1n0.net>
+Date: Tue, 17 Jul 2018 04:23:58 +0200
+Subject: nautilusgtkplacesview: show error if volume is not mounted
+
+Fixes crash as location would be NULL afterwards.
+
+Bug-Ubuntu: https://bugs.launchpad.net/ubuntu/+source/nautilus/+bug/1764779
+Forwarded: not-needed
+---
+ src/gtk/nautilusgtkplacesview.c | 20 +++++++++++++++-----
+ 1 file changed, 15 insertions(+), 5 deletions(-)
+
+diff --git a/src/gtk/nautilusgtkplacesview.c b/src/gtk/nautilusgtkplacesview.c
+index 041849f..e13c313 100644
+--- a/src/gtk/nautilusgtkplacesview.c
++++ b/src/gtk/nautilusgtkplacesview.c
+@@ -1330,13 +1330,23 @@ volume_mount_ready_cb (GObject      *source_volume,
+       GFile *root;
+ 
+       mount = g_volume_get_mount (volume);
+-      root = g_mount_get_default_location (mount);
+ 
+-      if (priv->should_open_location)
+-        emit_open_location (NAUTILUS_GTK_PLACES_VIEW (user_data), root, priv->open_flags);
++      if (G_IS_MOUNT (mount))
++        {
++          root = g_mount_get_default_location (mount);
+ 
+-      g_object_unref (mount);
+-      g_object_unref (root);
++          if (priv->should_open_location)
++            emit_open_location (NAUTILUS_GTK_PLACES_VIEW (user_data), root, priv->open_flags);
++
++          g_object_unref (mount);
++          g_object_unref (root);
++        }
++      else
++        {
++          emit_show_error_message (NAUTILUS_GTK_PLACES_VIEW(user_data),
++                                   _("Unable to access location"),
++                                   _("volume not mounted"));
++        }
+     }
+ 
+   update_places (view);
diff --git a/debian/patches/query-add-recursive-flags-and-use-it-in-search-engines.patch b/debian/patches/query-add-recursive-flags-and-use-it-in-search-engines.patch
new file mode 100644
index 0000000..c1ee4a7
--- /dev/null
+++ b/debian/patches/query-add-recursive-flags-and-use-it-in-search-engines.patch
@@ -0,0 +1,977 @@
+From: =?utf-8?b?Ik1hcmNvIFRyZXZpc2FuIChUcmV2acOxbyki?= <mail@3v1n0.net>
+Date: Tue, 17 Jul 2018 02:35:20 +0200
+Subject: query: add recursive flags and use it in search-engines
+
+Forwarded: yes, https://gitlab.gnome.org/GNOME/nautilus/merge_requests/249
+Bug-Ubuntu: https://bugs.launchpad.net/bugs/1767027
+---
+ src/meson.build                      |  1 +
+ src/nautilus-application.c           | 11 ++----
+ src/nautilus-application.h           |  3 +-
+ src/nautilus-directory-async.c       |  5 ++-
+ src/nautilus-file-private.h          |  3 +-
+ src/nautilus-file.c                  | 28 ++++++++++++++
+ src/nautilus-file.h                  |  2 +
+ src/nautilus-query-editor.c          | 61 +++++++++++++++++-------------
+ src/nautilus-query.c                 | 28 +++++++-------
+ src/nautilus-query.h                 | 14 +++++--
+ src/nautilus-search-directory.c      |  6 ---
+ src/nautilus-search-engine-private.h | 34 +++++++++++++++++
+ src/nautilus-search-engine-simple.c  | 72 ++++++++----------------------------
+ src/nautilus-search-engine-tracker.c | 16 ++++----
+ src/nautilus-search-engine.c         | 36 ++++++++++++++----
+ src/nautilus-search-engine.h         |  2 -
+ src/nautilus-shell-search-provider.c | 40 +++++++++++---------
+ src/nautilus-window-slot.c           | 19 ++++------
+ src/nautilus-window-slot.h           |  2 +-
+ src/nautilus-window.c                |  4 +-
+ src/nautilus-window.h                |  2 +-
+ 21 files changed, 222 insertions(+), 167 deletions(-)
+ create mode 100644 src/nautilus-search-engine-private.h
+
+diff --git a/src/meson.build b/src/meson.build
+index a771d12..73aafe9 100644
+--- a/src/meson.build
++++ b/src/meson.build
+@@ -226,6 +226,7 @@ libnautilus_sources = [
+     'nautilus-search-provider.h',
+     'nautilus-search-engine.c',
+     'nautilus-search-engine.h',
++    'nautilus-search-engine-private.h',
+     'nautilus-search-engine-model.c',
+     'nautilus-search-engine-model.h',
+     'nautilus-search-engine-simple.c',
+diff --git a/src/nautilus-application.c b/src/nautilus-application.c
+index 6293a89..13753a5 100644
+--- a/src/nautilus-application.c
++++ b/src/nautilus-application.c
+@@ -1621,15 +1621,12 @@ nautilus_application_new (void)
+ 
+ void
+ nautilus_application_search (NautilusApplication *self,
+-                             const gchar         *uri,
+-                             const gchar         *text)
++                             NautilusQuery       *query)
+ {
++    g_autoptr (GFile) location = NULL;
+     NautilusWindow *window;
+-    GFile *location;
+ 
+-    location = g_file_new_for_uri (uri);
++    location = nautilus_query_get_location (query);
+     window = open_window (self, location);
+-    nautilus_window_search (window, text);
+-
+-    g_object_unref (location);
++    nautilus_window_search (window, query);
+ }
+diff --git a/src/nautilus-application.h b/src/nautilus-application.h
+index 9cb32c8..47adcc4 100644
+--- a/src/nautilus-application.h
++++ b/src/nautilus-application.h
+@@ -86,8 +86,7 @@ GtkWidget * nautilus_application_connect_server (NautilusApplication *applicatio
+ 						 NautilusWindow      *window);
+ 
+ void nautilus_application_search (NautilusApplication *application,
+-                                  const gchar         *uri,
+-                                  const gchar         *text);
++                                  NautilusQuery       *query);
+ void nautilus_application_startup_common (NautilusApplication *application);
+ 
+ void nautilus_application_update_dbus_opened_locations (NautilusApplication *app);
+diff --git a/src/nautilus-directory-async.c b/src/nautilus-directory-async.c
+index 05a87e3..b519e20 100644
+--- a/src/nautilus-directory-async.c
++++ b/src/nautilus-directory-async.c
+@@ -4383,6 +4383,8 @@ got_filesystem_info (FilesystemInfoState *state,
+         file->details->filesystem_readonly =
+             g_file_info_get_attribute_boolean (info, G_FILE_ATTRIBUTE_FILESYSTEM_READONLY);
+         filesystem_type = g_file_info_get_attribute_string (info, G_FILE_ATTRIBUTE_FILESYSTEM_TYPE);
++        file->details->filesystem_remote =
++            g_file_info_get_attribute_boolean (info, G_FILE_ATTRIBUTE_FILESYSTEM_REMOTE);
+         if (g_strcmp0 (eel_ref_str_peek (file->details->filesystem_type), filesystem_type) != 0)
+         {
+             eel_ref_str_unref (file->details->filesystem_type);
+@@ -4465,7 +4467,8 @@ filesystem_info_start (NautilusDirectory *directory,
+     g_file_query_filesystem_info_async (location,
+                                         G_FILE_ATTRIBUTE_FILESYSTEM_READONLY ","
+                                         G_FILE_ATTRIBUTE_FILESYSTEM_USE_PREVIEW ","
+-                                        G_FILE_ATTRIBUTE_FILESYSTEM_TYPE,
++                                        G_FILE_ATTRIBUTE_FILESYSTEM_TYPE ","
++                                        G_FILE_ATTRIBUTE_FILESYSTEM_REMOTE,
+                                         G_PRIORITY_DEFAULT,
+                                         state->cancellable,
+                                         query_filesystem_info_callback,
+diff --git a/src/nautilus-file-private.h b/src/nautilus-file-private.h
+index adcfacf..1566589 100644
+--- a/src/nautilus-file-private.h
++++ b/src/nautilus-file-private.h
+@@ -202,7 +202,8 @@ struct NautilusFileDetails
+ 	eel_boolean_bit filesystem_readonly           : 1;
+ 	eel_boolean_bit filesystem_use_preview        : 2; /* GFilesystemPreviewType */
+ 	eel_boolean_bit filesystem_info_is_up_to_date : 1;
+-        eel_ref_str     filesystem_type;
++	eel_boolean_bit filesystem_remote             : 1;
++	eel_ref_str     filesystem_type;
+ 
+ 	time_t trash_time; /* 0 is unknown */
+ 	time_t recency; /* 0 is unknown */
+diff --git a/src/nautilus-file.c b/src/nautilus-file.c
+index 2135801..6a28229 100644
+--- a/src/nautilus-file.c
++++ b/src/nautilus-file.c
+@@ -4960,6 +4960,29 @@ nautilus_file_get_filesystem_type (NautilusFile *file)
+     return filesystem_type;
+ }
+ 
++gboolean
++nautilus_file_get_filesystem_remote (NautilusFile *file)
++{
++    NautilusFile *parent;
++
++    g_assert (NAUTILUS_IS_FILE (file));
++
++    if (nautilus_file_is_directory (file))
++    {
++        return file->details->filesystem_remote;
++    }
++    else
++    {
++        parent = nautilus_file_get_parent (file);
++        if (parent != NULL)
++        {
++            return parent->details->filesystem_remote;
++        }
++    }
++
++    return FALSE;
++}
++
+ gboolean
+ nautilus_file_should_show_thumbnail (NautilusFile *file)
+ {
+@@ -8361,6 +8384,11 @@ nautilus_file_is_remote (NautilusFile *file)
+ 
+     g_assert (NAUTILUS_IS_FILE (file));
+ 
++    if (nautilus_file_get_filesystem_remote (file))
++    {
++        return TRUE;
++    }
++
+     filesystem_type = nautilus_file_get_filesystem_type (file);
+ 
+     return filesystem_type != NULL && g_strv_contains (remote_types, filesystem_type);
+diff --git a/src/nautilus-file.h b/src/nautilus-file.h
+index 3a83bd4..af8c003 100644
+--- a/src/nautilus-file.h
++++ b/src/nautilus-file.h
+@@ -251,6 +251,8 @@ char *                  nautilus_file_get_filesystem_id                 (Nautilu
+ 
+ char *                  nautilus_file_get_filesystem_type               (NautilusFile                   *file);
+ 
++gboolean                nautilus_file_get_filesystem_remote             (NautilusFile                   *file);
++
+ NautilusFile *          nautilus_file_get_trash_original_file           (NautilusFile                   *file);
+ 
+ /* Permissions. */
+diff --git a/src/nautilus-query-editor.c b/src/nautilus-query-editor.c
+index 94b9c4d..f5260c9 100644
+--- a/src/nautilus-query-editor.c
++++ b/src/nautilus-query-editor.c
+@@ -80,33 +80,47 @@ static void nautilus_query_editor_changed (NautilusQueryEditor *editor);
+ 
+ G_DEFINE_TYPE_WITH_PRIVATE (NautilusQueryEditor, nautilus_query_editor, GTK_TYPE_SEARCH_BAR);
+ 
+-static gboolean
+-settings_search_is_recursive (NautilusQueryEditor *editor)
++static NautilusQueryRecursive
++settings_search_get_recursive (void)
++{
++    switch (g_settings_get_enum (nautilus_preferences, "recursive-search"))
++    {
++        case NAUTILUS_SPEED_TRADEOFF_ALWAYS:
++            return NAUTILUS_QUERY_RECURSIVE_ALWAYS;
++        case NAUTILUS_SPEED_TRADEOFF_LOCAL_ONLY:
++            return NAUTILUS_QUERY_RECURSIVE_LOCAL_ONLY;
++        case NAUTILUS_SPEED_TRADEOFF_NEVER:
++            return NAUTILUS_QUERY_RECURSIVE_NEVER;
++    }
++
++    return NAUTILUS_QUERY_RECURSIVE_ALWAYS;
++}
++
++static NautilusQueryRecursive
++settings_search_get_recursive_for_location (NautilusQueryEditor *editor)
+ {
+     NautilusQueryEditorPrivate *priv;
+-    NautilusFile *file;
+-    gboolean recursive;
++    NautilusQueryRecursive recursive;
+ 
+     priv = nautilus_query_editor_get_instance_private (editor);
++    recursive = settings_search_get_recursive ();
+ 
+-    if (!priv->location)
++    if (priv->location == NULL)
+     {
+-        return TRUE;
++        return recursive;
+     }
+ 
+-    file = nautilus_file_get (priv->location);
+-
+-    if (nautilus_file_is_remote (file))
++    if (recursive == NAUTILUS_QUERY_RECURSIVE_LOCAL_ONLY)
+     {
+-        recursive = g_settings_get_enum (nautilus_preferences, "recursive-search") == NAUTILUS_SPEED_TRADEOFF_ALWAYS;
+-    }
+-    else
+-    {
+-        recursive = g_settings_get_enum (nautilus_preferences, "recursive-search") == NAUTILUS_SPEED_TRADEOFF_LOCAL_ONLY ||
+-                    g_settings_get_enum (nautilus_preferences, "recursive-search") == NAUTILUS_SPEED_TRADEOFF_ALWAYS;
+-    }
++        NautilusFile *file = nautilus_file_get (priv->location);
+ 
+-    nautilus_file_unref (file);
++        if (nautilus_file_is_remote (file))
++        {
++            recursive = NAUTILUS_QUERY_RECURSIVE_NEVER;
++        }
++
++        nautilus_file_unref (file);
++    }
+ 
+     return recursive;
+ }
+@@ -144,12 +158,12 @@ update_information_label (NautilusQueryEditor *editor)
+             fts_sensitive = FALSE;
+         }
+         else if (nautilus_file_is_remote (file) &&
+-                 !settings_search_is_recursive (editor))
++                 settings_search_get_recursive_for_location (editor) == NAUTILUS_QUERY_RECURSIVE_NEVER)
+         {
+             label = _("Remote location — only searching the current folder");
+             fts_sensitive = FALSE;
+         }
+-        else if (!settings_search_is_recursive (editor))
++        else if (settings_search_get_recursive_for_location (editor) == NAUTILUS_QUERY_RECURSIVE_NEVER)
+         {
+             label = _("Only searching the current folder");
+         }
+@@ -171,7 +185,7 @@ recursive_search_preferences_changed (GSettings           *settings,
+                                       NautilusQueryEditor *editor)
+ {
+     NautilusQueryEditorPrivate *priv;
+-    gboolean recursive;
++    NautilusQueryRecursive recursive;
+ 
+     priv = nautilus_query_editor_get_instance_private (editor);
+ 
+@@ -180,7 +194,7 @@ recursive_search_preferences_changed (GSettings           *settings,
+         return;
+     }
+ 
+-    recursive = settings_search_is_recursive (editor);
++    recursive = settings_search_get_recursive ();
+     if (recursive != nautilus_query_get_recursive (priv->query))
+     {
+         nautilus_query_set_recursive (priv->query, recursive);
+@@ -382,7 +396,6 @@ create_query (NautilusQueryEditor *editor)
+     NautilusQueryEditorPrivate *priv;
+     NautilusQuery *query;
+     NautilusFile *file;
+-    gboolean recursive;
+     gboolean fts_enabled;
+ 
+     priv = nautilus_query_editor_get_instance_private (editor);
+@@ -396,11 +409,9 @@ create_query (NautilusQueryEditor *editor)
+ 
+     nautilus_query_set_search_content (query, fts_enabled);
+ 
+-    recursive = settings_search_is_recursive (editor);
+-
+     nautilus_query_set_text (query, gtk_entry_get_text (GTK_ENTRY (priv->entry)));
+     nautilus_query_set_location (query, priv->location);
+-    nautilus_query_set_recursive (query, recursive);
++    nautilus_query_set_recursive (query, settings_search_get_recursive ());
+ 
+     nautilus_query_editor_set_query (editor, query);
+ 
+diff --git a/src/nautilus-query.c b/src/nautilus-query.c
+index 59600d1..c3e4ef4 100644
+--- a/src/nautilus-query.c
++++ b/src/nautilus-query.c
+@@ -44,11 +44,11 @@ struct _NautilusQuery
+     GList *mime_types;
+     gboolean show_hidden;
+     GPtrArray *date_range;
++    NautilusQueryRecursive recursive;
+     NautilusQuerySearchType search_type;
+     NautilusQuerySearchContent search_content;
+ 
+     gboolean searching;
+-    gboolean recursive;
+     char **prepared_words;
+     GMutex prepared_words_mutex;
+ };
+@@ -118,7 +118,7 @@ nautilus_query_get_property (GObject    *object,
+ 
+         case PROP_RECURSIVE:
+         {
+-            g_value_set_boolean (value, self->recursive);
++            g_value_set_enum (value, self->recursive);
+         }
+         break;
+ 
+@@ -181,7 +181,7 @@ nautilus_query_set_property (GObject      *object,
+ 
+         case PROP_RECURSIVE:
+         {
+-            nautilus_query_set_recursive (self, g_value_get_boolean (value));
++            nautilus_query_set_recursive (self, g_value_get_enum (value));
+         }
+         break;
+ 
+@@ -272,11 +272,12 @@ nautilus_query_class_init (NautilusQueryClass *class)
+      */
+     g_object_class_install_property (gobject_class,
+                                      PROP_RECURSIVE,
+-                                     g_param_spec_boolean ("recursive",
+-                                                           "Whether the query is being performed on subdirectories",
+-                                                           "Whether the query is being performed on subdirectories or not",
+-                                                           FALSE,
+-                                                           G_PARAM_READWRITE));
++                                     g_param_spec_enum ("recursive",
++                                                        "Whether the query is being performed on subdirectories",
++                                                        "Whether the query is being performed on subdirectories or not",
++                                                        NAUTILUS_TYPE_QUERY_RECURSIVE,
++                                                        NAUTILUS_QUERY_RECURSIVE_ALWAYS,
++                                                        G_PARAM_READWRITE));
+ 
+     /**
+      * NautilusQuery::search-type:
+@@ -636,22 +637,21 @@ nautilus_query_set_searching (NautilusQuery *query,
+     }
+ }
+ 
+-gboolean
++NautilusQueryRecursive
+ nautilus_query_get_recursive (NautilusQuery *query)
+ {
+-    g_return_val_if_fail (NAUTILUS_IS_QUERY (query), FALSE);
++    g_return_val_if_fail (NAUTILUS_IS_QUERY (query),
++                          NAUTILUS_QUERY_RECURSIVE_ALWAYS);
+ 
+     return query->recursive;
+ }
+ 
+ void
+-nautilus_query_set_recursive (NautilusQuery *query,
+-                              gboolean       recursive)
++nautilus_query_set_recursive (NautilusQuery          *query,
++                              NautilusQueryRecursive  recursive)
+ {
+     g_return_if_fail (NAUTILUS_IS_QUERY (query));
+ 
+-    recursive = !!recursive;
+-
+     if (query->recursive != recursive)
+     {
+         query->recursive = recursive;
+diff --git a/src/nautilus-query.h b/src/nautilus-query.h
+index 2264f50..0e04061 100644
+--- a/src/nautilus-query.h
++++ b/src/nautilus-query.h
+@@ -35,6 +35,13 @@ typedef enum {
+         NAUTILUS_QUERY_SEARCH_CONTENT_FULL_TEXT,
+ } NautilusQuerySearchContent;
+ 
++typedef enum {
++        NAUTILUS_QUERY_RECURSIVE_NEVER,
++        NAUTILUS_QUERY_RECURSIVE_ALWAYS,
++        NAUTILUS_QUERY_RECURSIVE_LOCAL_ONLY,
++        NAUTILUS_QUERY_RECURSIVE_INDEXED_ONLY,
++} NautilusQueryRecursive;
++
+ #define NAUTILUS_TYPE_QUERY		(nautilus_query_get_type ())
+ 
+ G_DECLARE_FINAL_TYPE (NautilusQuery, nautilus_query, NAUTILUS, QUERY, GObject)
+@@ -67,10 +74,9 @@ GPtrArray*     nautilus_query_get_date_range     (NautilusQuery *query);
+ void           nautilus_query_set_date_range     (NautilusQuery *query,
+                                                   GPtrArray     *date_range);
+ 
+-gboolean       nautilus_query_get_recursive      (NautilusQuery *query);
+-
+-void           nautilus_query_set_recursive      (NautilusQuery *query,
+-                                                  gboolean       recursive);
++NautilusQueryRecursive nautilus_query_get_recursive (NautilusQuery *query);
++void                   nautilus_query_set_recursive (NautilusQuery          *query,
++                                                     NautilusQueryRecursive  recursive);
+ 
+ gboolean       nautilus_query_get_searching      (NautilusQuery *query);
+ 
+diff --git a/src/nautilus-search-directory.c b/src/nautilus-search-directory.c
+index ae710f3..d86fda2 100644
+--- a/src/nautilus-search-directory.c
++++ b/src/nautilus-search-directory.c
+@@ -176,8 +176,6 @@ static void
+ start_search (NautilusSearchDirectory *self)
+ {
+     NautilusSearchEngineModel *model_provider;
+-    NautilusSearchEngineSimple *simple_provider;
+-    gboolean recursive;
+ 
+     if (!self->query)
+     {
+@@ -205,10 +203,6 @@ start_search (NautilusSearchDirectory *self)
+     model_provider = nautilus_search_engine_get_model_provider (self->engine);
+     nautilus_search_engine_model_set_model (model_provider, self->base_model);
+ 
+-    simple_provider = nautilus_search_engine_get_simple_provider (self->engine);
+-    recursive = nautilus_query_get_recursive (self->query);
+-    g_object_set (simple_provider, "recursive", recursive, NULL);
+-
+     reset_file_list (self);
+ 
+     nautilus_search_provider_start (NAUTILUS_SEARCH_PROVIDER (self->engine));
+diff --git a/src/nautilus-search-engine-private.h b/src/nautilus-search-engine-private.h
+new file mode 100644
+index 0000000..8e28ad7
+--- /dev/null
++++ b/src/nautilus-search-engine-private.h
+@@ -0,0 +1,34 @@
++/*
++ * Copyright (C) 2018 Canonical Ltd.
++ *
++ * Nautilus is free software; you can redistribute it and/or
++ * modify it under the terms of the GNU General Public License as
++ * published by the Free Software Foundation; either version 2 of the
++ * License, or (at your option) any later version.
++ *
++ * Nautilus is distributed in the hope that it will be useful,
++ * but WITHOUT ANY WARRANTY; without even the implied warranty of
++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
++ * General Public License for more details.
++ *
++ * You should have received a copy of the GNU General Public
++ * License along with this program; see the file COPYING.  If not,
++ * see <http://www.gnu.org/licenses/>.
++ *
++ * Author: Marco Trevisan <marco@ubuntu.com>
++ *
++ */
++
++#ifndef NAUTILUS_SEARCH_ENGINE_PRIVATE_H
++#define NAUTILUS_SEARCH_ENGINE_PRIVATE_H
++
++#include "nautilus-query.h"
++
++typedef enum {
++        NAUTILUS_SEARCH_ENGINE_TYPE_NON_INDEXED,
++        NAUTILUS_SEARCH_ENGINE_TYPE_INDEXED,
++} NautilusSearchEngineType;
++
++gboolean is_recursive_search (NautilusSearchEngineType engine_type, NautilusQueryRecursive recursive, GFile *location);
++
++#endif /* NAUTILUS_SEARCH_ENGINE_PRIVATE_H */
+diff --git a/src/nautilus-search-engine-simple.c b/src/nautilus-search-engine-simple.c
+index 3ec9eb3..0c9ea81 100644
+--- a/src/nautilus-search-engine-simple.c
++++ b/src/nautilus-search-engine-simple.c
+@@ -20,9 +20,11 @@
+  */
+ 
+ #include <config.h>
++
+ #include "nautilus-search-hit.h"
+ #include "nautilus-search-provider.h"
+ #include "nautilus-search-engine-simple.h"
++#include "nautilus-search-engine-private.h"
+ #include "nautilus-ui-utilities.h"
+ #define DEBUG_FLAG NAUTILUS_DEBUG_SEARCH
+ #include "nautilus-debug.h"
+@@ -35,7 +37,7 @@
+ 
+ enum
+ {
+-    PROP_RECURSIVE = 1,
++    PROP_0,
+     PROP_RUNNING,
+     NUM_PROPERTIES
+ };
+@@ -52,7 +54,6 @@ typedef struct
+ 
+     GHashTable *visited;
+ 
+-    gboolean recursive;
+     gint n_processed_files;
+     GList *hits;
+ 
+@@ -66,8 +67,6 @@ struct _NautilusSearchEngineSimple
+     NautilusQuery *query;
+ 
+     SearchThreadData *active_search;
+-
+-    gboolean recursive;
+ };
+ 
+ static void nautilus_search_provider_init (NautilusSearchProviderInterface *iface);
+@@ -208,6 +207,9 @@ static void
+ visit_directory (GFile            *dir,
+                  SearchThreadData *data)
+ {
++    g_autoptr (GPtrArray) date_range = NULL;
++    NautilusQuerySearchType type;
++    NautilusQueryRecursive recursive;
+     GFileEnumerator *enumerator;
+     GFileInfo *info;
+     GFile *child;
+@@ -238,10 +240,12 @@ visit_directory (GFile            *dir,
+         return;
+     }
+ 
++    type = nautilus_query_get_search_type (data->query);
++    recursive = nautilus_query_get_recursive (data->query);
++    date_range = nautilus_query_get_date_range (data->query);
++
+     while ((info = g_file_enumerator_next_file (enumerator, data->cancellable, NULL)) != NULL)
+     {
+-        g_autoptr (GPtrArray) date_range = NULL;
+-
+         display_name = g_file_info_get_display_name (info);
+         if (display_name == NULL)
+         {
+@@ -276,15 +280,12 @@ visit_directory (GFile            *dir,
+         mtime = g_file_info_get_attribute_uint64 (info, "time::modified");
+         atime = g_file_info_get_attribute_uint64 (info, "time::access");
+ 
+-        date_range = nautilus_query_get_date_range (data->query);
+         if (found && date_range != NULL)
+         {
+-            NautilusQuerySearchType type;
+             guint64 current_file_time;
+ 
+             initial_date = g_ptr_array_index (date_range, 0);
+             end_date = g_ptr_array_index (date_range, 1);
+-            type = nautilus_query_get_search_type (data->query);
+ 
+             if (type == NAUTILUS_QUERY_SEARCH_TYPE_LAST_ACCESS)
+             {
+@@ -322,7 +323,10 @@ visit_directory (GFile            *dir,
+             send_batch (data);
+         }
+ 
+-        if (data->engine->recursive && g_file_info_get_file_type (info) == G_FILE_TYPE_DIRECTORY)
++        if (recursive != NAUTILUS_QUERY_RECURSIVE_NEVER &&
++            g_file_info_get_file_type (info) == G_FILE_TYPE_DIRECTORY &&
++            is_recursive_search (NAUTILUS_SEARCH_ENGINE_TYPE_NON_INDEXED,
++                                 recursive, child))
+         {
+             id = g_file_info_get_attribute_string (info, G_FILE_ATTRIBUTE_ID_FILE);
+             visited = FALSE;
+@@ -438,9 +442,9 @@ nautilus_search_engine_simple_set_query (NautilusSearchProvider *provider,
+ {
+     NautilusSearchEngineSimple *simple = NAUTILUS_SEARCH_ENGINE_SIMPLE (provider);
+ 
+-    g_object_ref (query);
+     g_clear_object (&simple->query);
+-    simple->query = query;
++
++    simple->query = g_object_ref (query);
+ }
+ 
+ static gboolean
+@@ -453,30 +457,6 @@ nautilus_search_engine_simple_is_running (NautilusSearchProvider *provider)
+     return simple->active_search != NULL;
+ }
+ 
+-static void
+-nautilus_search_engine_simple_set_property (GObject      *object,
+-                                            guint         arg_id,
+-                                            const GValue *value,
+-                                            GParamSpec   *pspec)
+-{
+-    NautilusSearchEngineSimple *engine = NAUTILUS_SEARCH_ENGINE_SIMPLE (object);
+-
+-    switch (arg_id)
+-    {
+-        case PROP_RECURSIVE:
+-        {
+-            engine->recursive = g_value_get_boolean (value);
+-        }
+-        break;
+-
+-        default:
+-        {
+-            G_OBJECT_WARN_INVALID_PROPERTY_ID (object, arg_id, pspec);
+-        }
+-        break;
+-    }
+-}
+-
+ static void
+ nautilus_search_engine_simple_get_property (GObject    *object,
+                                             guint       arg_id,
+@@ -492,12 +472,6 @@ nautilus_search_engine_simple_get_property (GObject    *object,
+             g_value_set_boolean (value, nautilus_search_engine_simple_is_running (NAUTILUS_SEARCH_PROVIDER (engine)));
+         }
+         break;
+-
+-        case PROP_RECURSIVE:
+-        {
+-            g_value_set_boolean (value, engine->recursive);
+-        }
+-        break;
+     }
+ }
+ 
+@@ -518,20 +492,6 @@ nautilus_search_engine_simple_class_init (NautilusSearchEngineSimpleClass *class
+     gobject_class = G_OBJECT_CLASS (class);
+     gobject_class->finalize = finalize;
+     gobject_class->get_property = nautilus_search_engine_simple_get_property;
+-    gobject_class->set_property = nautilus_search_engine_simple_set_property;
+-
+-    /**
+-     * NautilusSearchEngineSimple::recursive:
+-     *
+-     * Whether the search is recursive or not.
+-     */
+-    g_object_class_install_property (gobject_class,
+-                                     PROP_RECURSIVE,
+-                                     g_param_spec_boolean ("recursive",
+-                                                           "recursive",
+-                                                           "recursive",
+-                                                           FALSE,
+-                                                           G_PARAM_READWRITE | G_PARAM_CONSTRUCT | G_PARAM_STATIC_STRINGS));
+ 
+     /**
+      * NautilusSearchEngine::running:
+diff --git a/src/nautilus-search-engine-tracker.c b/src/nautilus-search-engine-tracker.c
+index 8218ea3..98f3c79 100644
+--- a/src/nautilus-search-engine-tracker.c
++++ b/src/nautilus-search-engine-tracker.c
+@@ -22,7 +22,7 @@
+ #include <config.h>
+ #include "nautilus-search-engine-tracker.h"
+ 
+-#include "nautilus-global-preferences.h"
++#include "nautilus-search-engine-private.h"
+ #include "nautilus-search-hit.h"
+ #include "nautilus-search-provider.h"
+ #define DEBUG_FLAG NAUTILUS_DEBUG_SEARCH
+@@ -296,7 +296,6 @@ nautilus_search_engine_tracker_start (NautilusSearchProvider *provider)
+     GString *sparql;
+     GList *mimetypes, *l;
+     gint mime_count;
+-    gboolean recursive;
+     GPtrArray *date_range;
+ 
+     tracker = NAUTILUS_SEARCH_ENGINE_TRACKER (provider);
+@@ -325,10 +324,6 @@ nautilus_search_engine_tracker_start (NautilusSearchProvider *provider)
+         return;
+     }
+ 
+-    recursive = g_settings_get_enum (nautilus_preferences, "recursive-search") == NAUTILUS_SPEED_TRADEOFF_LOCAL_ONLY ||
+-                g_settings_get_enum (nautilus_preferences, "recursive-search") == NAUTILUS_SPEED_TRADEOFF_ALWAYS;
+-    tracker->recursive = recursive;
+-
+     tracker->fts_enabled = nautilus_query_get_search_content (tracker->query);
+ 
+     query_text = nautilus_query_get_text (tracker->query);
+@@ -476,16 +471,21 @@ static void
+ nautilus_search_engine_tracker_set_query (NautilusSearchProvider *provider,
+                                           NautilusQuery          *query)
+ {
++    g_autoptr(GFile) location = NULL;
+     NautilusSearchEngineTracker *tracker;
+ 
+     tracker = NAUTILUS_SEARCH_ENGINE_TRACKER (provider);
++    location = nautilus_query_get_location (query);
+ 
+     if (!tracker->available)
+         return;
+ 
+-    g_object_ref (query);
+     g_clear_object (&tracker->query);
+-    tracker->query = query;
++
++    tracker->query = g_object_ref (query);
++    tracker->recursive = is_recursive_search (NAUTILUS_SEARCH_ENGINE_TYPE_INDEXED,
++                                              nautilus_query_get_recursive (query),
++                                              location);
+ }
+ 
+ static gboolean
+diff --git a/src/nautilus-search-engine.c b/src/nautilus-search-engine.c
+index 209bd4f..a545160 100644
+--- a/src/nautilus-search-engine.c
++++ b/src/nautilus-search-engine.c
+@@ -20,12 +20,14 @@
+  */
+ 
+ #include <config.h>
+-
+-#include <glib/gi18n.h>
+-#include "nautilus-search-provider.h"
+ #include "nautilus-search-engine.h"
+ #include "nautilus-search-engine-simple.h"
++#include "nautilus-search-engine-private.h"
++
+ #include "nautilus-search-engine-model.h"
++#include "nautilus-search-provider.h"
++#include "nautilus-file.h"
++#include <glib/gi18n.h>
+ #define DEBUG_FLAG NAUTILUS_DEBUG_SEARCH
+ #include "nautilus-debug.h"
+ #include "nautilus-search-engine-tracker.h"
+@@ -417,12 +419,30 @@ nautilus_search_engine_get_model_provider (NautilusSearchEngine *engine)
+     return priv->model;
+ }
+ 
+-NautilusSearchEngineSimple *
+-nautilus_search_engine_get_simple_provider (NautilusSearchEngine *engine)
++gboolean
++is_recursive_search (NautilusSearchEngineType  engine_type,
++                     NautilusQueryRecursive    recursive,
++                     GFile                    *location)
+ {
+-    NautilusSearchEnginePrivate *priv;
++    switch (recursive)
++    {
++        case NAUTILUS_QUERY_RECURSIVE_NEVER:
++            return FALSE;
+ 
+-    priv = nautilus_search_engine_get_instance_private (engine);
++        case NAUTILUS_QUERY_RECURSIVE_ALWAYS:
++            return TRUE;
++
++        case NAUTILUS_QUERY_RECURSIVE_INDEXED_ONLY:
++            return engine_type == NAUTILUS_SEARCH_ENGINE_TYPE_INDEXED;
++
++        case NAUTILUS_QUERY_RECURSIVE_LOCAL_ONLY:
++        {
++            NautilusFile *file = nautilus_file_get (location);
++            gboolean remote = !nautilus_file_is_remote (file);
++            nautilus_file_unref (file);
++            return remote;
++        }
++    }
+ 
+-    return priv->simple;
++    return TRUE;
+ }
+diff --git a/src/nautilus-search-engine.h b/src/nautilus-search-engine.h
+index 0416e83..435908a 100644
+--- a/src/nautilus-search-engine.h
++++ b/src/nautilus-search-engine.h
+@@ -42,8 +42,6 @@ struct _NautilusSearchEngineClass
+ NautilusSearchEngine *nautilus_search_engine_new                (void);
+ NautilusSearchEngineModel *
+                       nautilus_search_engine_get_model_provider (NautilusSearchEngine *engine);
+-NautilusSearchEngineSimple *
+-                      nautilus_search_engine_get_simple_provider (NautilusSearchEngine *engine);
+ 
+ G_END_DECLS
+ 
+diff --git a/src/nautilus-shell-search-provider.c b/src/nautilus-shell-search-provider.c
+index cdadc08..b95babf 100644
+--- a/src/nautilus-shell-search-provider.c
++++ b/src/nautilus-shell-search-provider.c
+@@ -426,15 +426,32 @@ search_add_volumes_and_bookmarks (PendingSearch *search)
+     g_object_unref (volume_monitor);
+ }
+ 
++static NautilusQuery*
++shell_query_new (gchar **terms)
++{
++    NautilusQuery *query;
++    g_autoptr (GFile) home = NULL;
++    g_autofree gchar *terms_joined = NULL;
++
++    terms_joined = g_strjoinv (" ", terms);
++    home = g_file_new_for_path (g_get_home_dir ());
++
++    query = nautilus_query_new ();
++    nautilus_query_set_show_hidden_files (query, FALSE);
++    nautilus_query_set_recursive (query, NAUTILUS_QUERY_RECURSIVE_INDEXED_ONLY);
++    nautilus_query_set_text (query, terms_joined);
++    nautilus_query_set_location (query, home);
++
++    return query;
++}
++
+ static void
+ execute_search (NautilusShellSearchProvider  *self,
+                 GDBusMethodInvocation        *invocation,
+                 gchar                       **terms)
+ {
+-    gchar *terms_joined;
+     NautilusQuery *query;
+     PendingSearch *pending_search;
+-    GFile *home;
+ 
+     cancel_current_search (self);
+ 
+@@ -446,13 +463,7 @@ execute_search (NautilusShellSearchProvider  *self,
+         return;
+     }
+ 
+-    terms_joined = g_strjoinv (" ", terms);
+-    home = g_file_new_for_path (g_get_home_dir ());
+-
+-    query = nautilus_query_new ();
+-    nautilus_query_set_show_hidden_files (query, FALSE);
+-    nautilus_query_set_text (query, terms_joined);
+-    nautilus_query_set_location (query, home);
++    query = shell_query_new (terms);
+ 
+     pending_search = g_slice_new0 (PendingSearch);
+     pending_search->invocation = g_object_ref (invocation);
+@@ -479,9 +490,6 @@ execute_search (NautilusShellSearchProvider  *self,
+     nautilus_search_provider_set_query (NAUTILUS_SEARCH_PROVIDER (pending_search->engine),
+                                         query);
+     nautilus_search_provider_start (NAUTILUS_SEARCH_PROVIDER (pending_search->engine));
+-
+-    g_clear_object (&home);
+-    g_free (terms_joined);
+ }
+ 
+ static gboolean
+@@ -713,13 +721,9 @@ handle_launch_search (NautilusShellSearchProvider2  *skeleton,
+                       gpointer                       user_data)
+ {
+     GApplication *app = g_application_get_default ();
+-    gchar *string = g_strjoinv (" ", terms);
+-    gchar *uri = nautilus_get_home_directory_uri ();
++    g_autoptr (NautilusQuery) query = shell_query_new (terms);
+ 
+-    nautilus_application_search (NAUTILUS_APPLICATION (app), uri, string);
+-
+-    g_free (string);
+-    g_free (uri);
++    nautilus_application_search (NAUTILUS_APPLICATION (app), query);
+ 
+     nautilus_shell_search_provider2_complete_launch_search (skeleton, invocation);
+     return TRUE;
+diff --git a/src/nautilus-window-slot.c b/src/nautilus-window-slot.c
+index a9911ee..6935de3 100644
+--- a/src/nautilus-window-slot.c
++++ b/src/nautilus-window-slot.c
+@@ -100,6 +100,7 @@ typedef struct
+ 
+     /* Query editor */
+     NautilusQueryEditor *query_editor;
++    NautilusQuery *pending_search_query;
+     gulong qe_changed_id;
+     gulong qe_cancel_id;
+     gulong qe_activated_id;
+@@ -110,7 +111,6 @@ typedef struct
+      * finish. Used for showing a spinner to provide feedback to the user. */
+     gboolean allow_stop;
+     gboolean needs_reload;
+-    gchar *pending_search_text;
+ 
+     /* New location. */
+     GFile *pending_location;
+@@ -361,9 +361,9 @@ update_search_visible (NautilusWindowSlot *self)
+         g_object_unref (query);
+     }
+ 
+-    if (priv->pending_search_text)
++    if (priv->pending_search_query)
+     {
+-        nautilus_window_slot_search (self, g_strdup (priv->pending_search_text));
++        nautilus_window_slot_search (self, g_object_ref (priv->pending_search_query));
+     }
+ }
+ 
+@@ -589,17 +589,13 @@ nautilus_window_slot_get_search_visible (NautilusWindowSlot *self)
+ 
+ void
+ nautilus_window_slot_search (NautilusWindowSlot *self,
+-                             const gchar        *text)
++                             NautilusQuery      *query)
+ {
+     NautilusWindowSlotPrivate *priv;
+     NautilusView *view;
+ 
+     priv = nautilus_window_slot_get_instance_private (self);
+-    if (priv->pending_search_text)
+-    {
+-        g_free (priv->pending_search_text);
+-        priv->pending_search_text = NULL;
+-    }
++    g_clear_object (&priv->pending_search_query);
+ 
+     view = nautilus_window_slot_get_current_view (self);
+     /* We could call this when the location is still being checked in the
+@@ -608,11 +604,11 @@ nautilus_window_slot_search (NautilusWindowSlot *self,
+     if (view)
+     {
+         nautilus_window_slot_set_search_visible (self, TRUE);
+-        nautilus_query_editor_set_text (priv->query_editor, text);
++        nautilus_query_editor_set_query (priv->query_editor, query);
+     }
+     else
+     {
+-        priv->pending_search_text = g_strdup (text);
++        priv->pending_search_query = g_object_ref (query);
+     }
+ }
+ 
+@@ -2814,6 +2810,7 @@ nautilus_window_slot_dispose (GObject *object)
+     g_clear_object (&priv->current_location_bookmark);
+     g_clear_object (&priv->last_location_bookmark);
+     g_clear_object (&priv->slot_action_group);
++    g_clear_object (&priv->pending_search_query);
+ 
+     g_clear_pointer (&priv->find_mount_cancellable, g_cancellable_cancel);
+ 
+diff --git a/src/nautilus-window-slot.h b/src/nautilus-window-slot.h
+index 573357d..f67b6ab 100644
+--- a/src/nautilus-window-slot.h
++++ b/src/nautilus-window-slot.h
+@@ -112,7 +112,7 @@ void     nautilus_window_slot_set_active                   (NautilusWindowSlot *
+ gboolean nautilus_window_slot_get_loading                  (NautilusWindowSlot *slot);
+ 
+ void     nautilus_window_slot_search                       (NautilusWindowSlot *slot,
+-                                                            const gchar        *text);
++                                                            NautilusQuery      *query);
+ 
+ gboolean nautilus_window_slot_handles_location (NautilusWindowSlot *self,
+                                                 GFile              *location);
+diff --git a/src/nautilus-window.c b/src/nautilus-window.c
+index a23d515..8eab985 100644
+--- a/src/nautilus-window.c
++++ b/src/nautilus-window.c
+@@ -3100,14 +3100,14 @@ nautilus_window_show_about_dialog (NautilusWindow *window)
+ 
+ void
+ nautilus_window_search (NautilusWindow *window,
+-                        const gchar    *text)
++                        NautilusQuery  *query)
+ {
+     NautilusWindowSlot *active_slot;
+ 
+     active_slot = nautilus_window_get_active_slot (window);
+     if (active_slot)
+     {
+-        nautilus_window_slot_search (active_slot, text);
++        nautilus_window_slot_search (active_slot, query);
+     }
+     else
+     {
+diff --git a/src/nautilus-window.h b/src/nautilus-window.h
+index 39b16e7..c1196d3 100644
+--- a/src/nautilus-window.h
++++ b/src/nautilus-window.h
+@@ -135,7 +135,7 @@ void nautilus_window_end_dnd (NautilusWindow *window,
+                               GdkDragContext *context);
+ 
+ void nautilus_window_search (NautilusWindow *window,
+-                             const gchar    *text);
++                             NautilusQuery  *query);
+ 
+ void nautilus_window_initialize_slot (NautilusWindow          *window,
+                                       NautilusWindowSlot      *slot,
diff --git a/debian/patches/series b/debian/patches/series
index d6c50a8..04196e1 100644
--- a/debian/patches/series
+++ b/debian/patches/series
@@ -15,9 +15,12 @@ ubuntu_backspace_behaviour.patch
 #Needs updating
 #16_unity_new_documents.patch
 0015-tracker-search-engine-don-t-start-it-if-not-availabl.patch
+query-add-recursive-flags-and-use-it-in-search-engines.patch
 0016-search-engine-add-a-recent-search-engine-listing-Gtk.patch
 0017-recent-add-function-to-update-manager-on-file-rename.patch
 0018-search-engine-add-locate-based-search-engine.patch
 appstream-compulsory.patch
 server_list_segfault.patch
 clear_pending_selection.patch
+git_middle_tab.patch
+nautilusgtkplacesview-show-error-if-volume-is-not-mounted.patch
diff --git a/meson.build b/meson.build
index 18e645a..6256193 100644
--- a/meson.build
+++ b/meson.build
@@ -1,5 +1,5 @@
 project ('nautilus', 'c',
-         version: '3.26.3',
+         version: '3.26.3.1',
          meson_version: '>=0.40.0',
          license: 'GPL3+')
 
diff --git a/src/nautilus-file.c b/src/nautilus-file.c
index fc765be..d6ac35a 100644
--- a/src/nautilus-file.c
+++ b/src/nautilus-file.c
@@ -5496,7 +5496,7 @@ nautilus_thumbnail_is_limited_by_zoom (int size,
 
     zoom_level = size * scale;
 
-    if (zoom_level <= NAUTILUS_LIST_ICON_SIZE_STANDARD)
+    if (zoom_level <= NAUTILUS_LIST_ICON_SIZE_SMALL)
     {
         return TRUE;
     }
diff --git a/src/nautilus-files-view.c b/src/nautilus-files-view.c
index 9b7b9b9..8784f63 100644
--- a/src/nautilus-files-view.c
+++ b/src/nautilus-files-view.c
@@ -2047,8 +2047,9 @@ static void
 nautilus_files_view_new_folder_dialog_new (NautilusFilesView *view,
                                            gboolean           with_selection)
 {
-    g_autoptr (NautilusDirectory) containing_directory = NULL;
+    NautilusDirectory *containing_directory;
     NautilusFilesViewPrivate *priv;
+    GList *selection;
     g_autofree char *uri = NULL;
     g_autofree char *common_prefix = NULL;
 
@@ -2062,13 +2063,8 @@ nautilus_files_view_new_folder_dialog_new (NautilusFilesView *view,
     uri = nautilus_files_view_get_backing_uri (view);
     containing_directory = nautilus_directory_get_by_uri (uri);
 
-    if (with_selection)
-    {
-        GList *selection;
-        selection = nautilus_view_get_selection (NAUTILUS_VIEW (view));
-        common_prefix = nautilus_get_common_filename_prefix (selection, MIN_COMMON_FILENAME_PREFIX_LENGTH);
-        nautilus_file_list_free (selection);
-    }
+    selection = nautilus_view_get_selection (NAUTILUS_VIEW (view));
+    common_prefix = nautilus_get_common_filename_prefix (selection, MIN_COMMON_FILENAME_PREFIX_LENGTH);
 
     priv->new_folder_controller =
         nautilus_new_folder_dialog_controller_new (nautilus_files_view_get_containing_window (view),
@@ -2084,6 +2080,9 @@ nautilus_files_view_new_folder_dialog_new (NautilusFilesView *view,
                       "cancelled",
                       (GCallback) new_folder_dialog_controller_on_cancelled,
                       view);
+
+    nautilus_file_list_free (selection);
+    nautilus_directory_unref (containing_directory);
 }
 
 typedef struct
diff --git a/src/nautilus-trash-monitor.c b/src/nautilus-trash-monitor.c
index 97f4874..1e156e1 100644
--- a/src/nautilus-trash-monitor.c
+++ b/src/nautilus-trash-monitor.c
@@ -29,7 +29,7 @@
 #include <gio/gio.h>
 #include <string.h>
 
-#define UPDATE_RATE_SECONDS 5
+#define UPDATE_RATE_SECONDS 1
 
 struct NautilusTrashMonitorDetails
 {
