diff --git a/src/com/android/quicksearchbox/ShortcutRepositoryImplLog.java b/src/com/android/quicksearchbox/ShortcutRepositoryImplLog.java
index e35163e..c36fe6a 100644
--- a/src/com/android/quicksearchbox/ShortcutRepositoryImplLog.java
+++ b/src/com/android/quicksearchbox/ShortcutRepositoryImplLog.java
@@ -57,8 +57,8 @@
 
     private static final String HAS_HISTORY_QUERY =
         "SELECT " + Shortcuts.intent_key.fullName + " FROM " + Shortcuts.TABLE_NAME;
-    private final String mEmptyQueryShortcutQuery ;
-    private final String mShortcutQuery;
+    private String mEmptyQueryShortcutQuery ;
+    private String mShortcutQuery;
 
     private static final String SHORTCUT_BY_ID_WHERE =
             Shortcuts.shortcut_id.name() + "=? AND " + Shortcuts.source.name() + "=?";
@@ -99,60 +99,78 @@
         mUiThread = uiThread;
         mLogExecutor = logExecutor;
         mOpenHelper = new DbOpenHelper(context, name, DB_VERSION, config);
-        mEmptyQueryShortcutQuery = buildShortcutQuery(true);
-        mShortcutQuery = buildShortcutQuery(false);
+        buildShortcutQueries();
+
         mSearchSpinner = Util.getResourceUri(mContext, R.drawable.search_spinner).toString();
     }
 
-    private String buildShortcutQuery(boolean emptyQuery) {
-        // clicklog first, since that's where restrict the result set
-        String tables = ClickLog.TABLE_NAME + " INNER JOIN " + Shortcuts.TABLE_NAME
-                + " ON " + ClickLog.intent_key.fullName + " = " + Shortcuts.intent_key.fullName;
-        String[] columns = {
+    // clicklog first, since that's where restrict the result set
+    private static final String TABLES = ClickLog.TABLE_NAME + " INNER JOIN " +
+            Shortcuts.TABLE_NAME + " ON " + ClickLog.intent_key.fullName + " = " +
+            Shortcuts.intent_key.fullName;
+
+    private static final String AS = " AS ";
+
+    private static final String[] SHORTCUT_QUERY_COLUMNS = {
             Shortcuts.intent_key.fullName,
             Shortcuts.source.fullName,
             Shortcuts.source_version_code.fullName,
-            Shortcuts.format.fullName + " AS " + SearchManager.SUGGEST_COLUMN_FORMAT,
-            Shortcuts.title + " AS " + SearchManager.SUGGEST_COLUMN_TEXT_1,
-            Shortcuts.description + " AS " + SearchManager.SUGGEST_COLUMN_TEXT_2,
-            Shortcuts.description_url + " AS " + SearchManager.SUGGEST_COLUMN_TEXT_2_URL,
-            Shortcuts.icon1 + " AS " + SearchManager.SUGGEST_COLUMN_ICON_1,
-            Shortcuts.icon2 + " AS " + SearchManager.SUGGEST_COLUMN_ICON_2,
-            Shortcuts.intent_action + " AS " + SearchManager.SUGGEST_COLUMN_INTENT_ACTION,
-            Shortcuts.intent_data + " AS " + SearchManager.SUGGEST_COLUMN_INTENT_DATA,
-            Shortcuts.intent_query + " AS " + SearchManager.SUGGEST_COLUMN_QUERY,
-            Shortcuts.intent_extradata + " AS " + SearchManager.SUGGEST_COLUMN_INTENT_EXTRA_DATA,
-            Shortcuts.shortcut_id + " AS " + SearchManager.SUGGEST_COLUMN_SHORTCUT_ID,
-            Shortcuts.spinner_while_refreshing + " AS " + SearchManager.SUGGEST_COLUMN_SPINNER_WHILE_REFRESHING,
-            Shortcuts.log_type + " AS " + CursorBackedSuggestionCursor.SUGGEST_COLUMN_LOG_TYPE,
+            Shortcuts.format.fullName + AS + SearchManager.SUGGEST_COLUMN_FORMAT,
+            Shortcuts.title + AS + SearchManager.SUGGEST_COLUMN_TEXT_1,
+            Shortcuts.description + AS + SearchManager.SUGGEST_COLUMN_TEXT_2,
+            Shortcuts.description_url + AS + SearchManager.SUGGEST_COLUMN_TEXT_2_URL,
+            Shortcuts.icon1 + AS + SearchManager.SUGGEST_COLUMN_ICON_1,
+            Shortcuts.icon2 + AS + SearchManager.SUGGEST_COLUMN_ICON_2,
+            Shortcuts.intent_action + AS + SearchManager.SUGGEST_COLUMN_INTENT_ACTION,
+            Shortcuts.intent_data + AS + SearchManager.SUGGEST_COLUMN_INTENT_DATA,
+            Shortcuts.intent_query + AS + SearchManager.SUGGEST_COLUMN_QUERY,
+            Shortcuts.intent_extradata + AS + SearchManager.SUGGEST_COLUMN_INTENT_EXTRA_DATA,
+            Shortcuts.shortcut_id + AS + SearchManager.SUGGEST_COLUMN_SHORTCUT_ID,
+            Shortcuts.spinner_while_refreshing + AS +
+                    SearchManager.SUGGEST_COLUMN_SPINNER_WHILE_REFRESHING,
+            Shortcuts.log_type + AS + CursorBackedSuggestionCursor.SUGGEST_COLUMN_LOG_TYPE,
         };
+
+    // Avoid GLOB by using >= AND <, with some manipulation (see nextString(String)).
+    // to figure out the upper bound (e.g. >= "abc" AND < "abd"
+    // This allows us to use parameter binding and still take advantage of the
+    // index on the query column.
+    private static final String PREFIX_RESTRICTION =
+            ClickLog.query.fullName + " >= ?1 AND " + ClickLog.query.fullName + " < ?2";
+
+    private static final String HIT_COUNT_EXPR = "COUNT(" + ClickLog._id.fullName + ")";
+    private static final String LAST_HIT_TIME_EXPR = "MAX(" + ClickLog.hit_time.fullName + ")";
+    private static final String GROUP_BY = ClickLog.intent_key.fullName;
+    private static final String PREFER_LATEST_PREFIX =
+        "(" + LAST_HIT_TIME_EXPR + " = (SELECT " + LAST_HIT_TIME_EXPR + " FROM " +
+        ClickLog.TABLE_NAME + " WHERE ";
+    private static final String PREFER_LATEST_SUFFIX = "))";
+
+    private void buildShortcutQueries() {
         // SQL expression for the time before which no clicks should be counted.
-        String cutOffTime_expr = "(" + "?3" + " - " + mConfig.getMaxStatAgeMillis() + ")";
-        // Avoid GLOB by using >= AND <, with some manipulation (see nextString(String)).
-        // to figure out the upper bound (e.g. >= "abc" AND < "abd"
-        // This allows us to use parameter binding and still take advantage of the
-        // index on the query column.
-        String prefixRestriction =
-                ClickLog.query.fullName + " >= ?1 AND " + ClickLog.query.fullName + " < ?2";
+        String cutOffTime_expr = "(?3 - " + mConfig.getMaxStatAgeMillis() + ")";
         // Filter out clicks that are too old
         String ageRestriction = ClickLog.hit_time.fullName + " >= " + cutOffTime_expr;
-        String where = (emptyQuery ? "" : prefixRestriction + " AND ") + ageRestriction;
-        String groupBy = ClickLog.intent_key.fullName;
         String having = null;
-        String hit_count_expr = "COUNT(" + ClickLog._id.fullName + ")";
-        String last_hit_time_expr = "MAX(" + ClickLog.hit_time.fullName + ")";
         String scale_expr =
             // time (msec) from cut-off to last hit time
-            "((" + last_hit_time_expr + " - " + cutOffTime_expr + ") / "
+            "((" + LAST_HIT_TIME_EXPR + " - " + cutOffTime_expr + ") / "
             // divided by time (sec) from cut-off to now
             // we use msec/sec to get 1000 as max score
             + (mConfig.getMaxStatAgeMillis() / 1000) + ")";
-        String ordering_expr = "(" + hit_count_expr + " * " + scale_expr + ")";
-        String preferLatest = "(" + last_hit_time_expr + " = (SELECT " + last_hit_time_expr +
-                " FROM " + ClickLog.TABLE_NAME + " WHERE " + where + "))";
+        String ordering_expr = "(" + HIT_COUNT_EXPR + " * " + scale_expr + ")";
+
+        String where = ageRestriction;
+        String preferLatest = PREFER_LATEST_PREFIX + where + PREFER_LATEST_SUFFIX;
         String orderBy = preferLatest + " DESC, " + ordering_expr + " DESC";
-        return SQLiteQueryBuilder.buildQueryString(
-                false, tables, columns, where, groupBy, having, orderBy, null);
+        mEmptyQueryShortcutQuery = SQLiteQueryBuilder.buildQueryString(
+                false, TABLES, SHORTCUT_QUERY_COLUMNS, where, GROUP_BY, having, orderBy, null);
+
+        where = PREFIX_RESTRICTION + " AND " + ageRestriction;
+        preferLatest = PREFER_LATEST_PREFIX + where + PREFER_LATEST_SUFFIX;
+        orderBy = preferLatest + " DESC, " + ordering_expr + " DESC";
+        mShortcutQuery = SQLiteQueryBuilder.buildQueryString(
+                false, TABLES, SHORTCUT_QUERY_COLUMNS, where, GROUP_BY, having, orderBy, null);
     }
 
     /**
@@ -633,7 +651,7 @@
 
     // contains creation and update logic
     private static class DbOpenHelper extends SQLiteOpenHelper {
-        private Config mConfig;
+        private final Config mConfig;
         private String mPath;
         private static final String SHORTCUT_ID_INDEX
                 = Shortcuts.TABLE_NAME + "_" + Shortcuts.shortcut_id.name();
