diff -ruNp gnome-logs/src/gl-eventviewlist.c gnome-logs-zc/src/gl-eventviewlist.c
--- gnome-logs/src/gl-eventviewlist.c	2016-03-16 04:41:06.987242687 -0700
+++ gnome-logs-zc/src/gl-eventviewlist.c	2016-03-16 04:44:16.965324265 -0700
@@ -51,6 +51,7 @@ typedef struct
     GtkWidget *event_scrolled;
     GtkWidget *search_entry;
     gchar *search_text;
+    GPtrArray *token_array;
     const gchar *boot_match;
 } GlEventViewListPrivate;
 
@@ -177,6 +178,9 @@ tokenize_search_string (gchar *search_te
     GPtrArray *token_array;
     GScanner *scanner;
 
+    if (!search_text || !(*search_text))
+        return NULL;
+
     token_array = g_ptr_array_new_with_free_func (g_free);
     scanner = g_scanner_new (NULL);
     scanner->config->cset_skip_characters = " =\t\n";
@@ -436,20 +440,9 @@ calculate_match (GlJournalEntry *entry,
 
 static gboolean
 search_in_result (GlJournalEntry *entry,
-                  const gchar *search_text)
+                  GPtrArray *token_array)
 {
-    gboolean matches;
-    gchar *search_text_copy;
-    GPtrArray *token_array;
-
-    search_text_copy = g_strdup (search_text);
-
-    token_array = tokenize_search_string (search_text_copy);
-    matches = calculate_match (entry, token_array, TRUE);
-
-    g_ptr_array_free (token_array, TRUE);
-
-    return matches;
+    return calculate_match (entry, token_array, TRUE);
 }
 
 static void
@@ -495,7 +488,7 @@ listbox_search_filter_func (GtkListBoxRo
 
         if (gl_event_view_search_is_case_sensitive (view))
         {
-            if (search_in_result (entry, priv->search_text))
+            if (search_in_result (entry, priv->token_array))
             {
                 return TRUE;
             }
@@ -503,15 +496,7 @@ listbox_search_filter_func (GtkListBoxRo
         else
         {
             gboolean matches;
-            gchar *search_text_copy;
-            GPtrArray *token_array;
-
-            search_text_copy = g_strdup (priv->search_text);
-
-            token_array = tokenize_search_string (search_text_copy);
-            matches = calculate_match (entry, token_array, FALSE);
-
-            g_ptr_array_free (token_array, TRUE);
+            matches = calculate_match (entry, priv->token_array, FALSE);
 
             return matches;
         }
@@ -984,6 +969,8 @@ gl_event_view_list_finalize (GObject *ob
 
     g_clear_object (&priv->journal_model);
     g_clear_pointer (&priv->search_text, g_free);
+    if (priv->token_array)
+            g_ptr_array_free (priv->token_array, TRUE);
     g_object_unref (priv->category_sizegroup);
     g_object_unref (priv->message_sizegroup);
     g_object_unref (priv->time_sizegroup);
@@ -1029,6 +1016,7 @@ gl_event_view_list_init (GlEventViewList
 
     priv->search_text = NULL;
     priv->boot_match = NULL;
+    priv->token_array = NULL;
     priv->category_sizegroup = gtk_size_group_new (GTK_SIZE_GROUP_HORIZONTAL);
     priv->message_sizegroup = gtk_size_group_new (GTK_SIZE_GROUP_HORIZONTAL);
     priv->time_sizegroup = gtk_size_group_new (GTK_SIZE_GROUP_HORIZONTAL);
@@ -1071,6 +1059,7 @@ gl_event_view_list_search (GlEventViewLi
                            const gchar *needle)
 {
     GlEventViewListPrivate *priv;
+    gchar *search_text_copy;
 
     g_return_if_fail (GL_EVENT_VIEW_LIST (view));
 
@@ -1079,9 +1068,16 @@ gl_event_view_list_search (GlEventViewLi
     g_free (priv->search_text);
     priv->search_text = g_strdup (needle);
 
+    search_text_copy = g_strdup (priv->search_text);
+    if (priv->token_array)
+            g_ptr_array_free (priv->token_array, TRUE);
+    priv->token_array = tokenize_search_string (search_text_copy);
+    g_free(search_text_copy);
+
     /* for search, we need all entries - tell the model to fetch them */
     gl_journal_model_fetch_more_entries (priv->journal_model, TRUE);
 
+
     gtk_list_box_invalidate_filter (priv->entries_box);
 }
 