diff --git a/module/VuFind/src/VuFind/Db/Table/ResourceTags.php b/module/VuFind/src/VuFind/Db/Table/ResourceTags.php
index ce5f745d0f0ca68c2dead764772a7bd1dc4d40fe..afee8149d76378a2a249643488861e15741bb09f 100644
--- a/module/VuFind/src/VuFind/Db/Table/ResourceTags.php
+++ b/module/VuFind/src/VuFind/Db/Table/ResourceTags.php
@@ -395,7 +395,7 @@ class ResourceTags extends Gateway
                 $select->where->equalTo('resource_tags.tag_id', $tagId);
             }
             $select->group(['tag_id', 'tag']);
-            $select->order(['tag']);
+            $select->order([new Expression('lower(tag)')]);
         };
         return $this->select($callback);
     }
@@ -456,6 +456,27 @@ class ResourceTags extends Gateway
         return $this->select($callback);
     }
 
+    /**
+     * Given an array for sorting database results, make sure the tag field is
+     * sorted in a case-insensitive fashion.
+     *
+     * @param array $order Order settings
+     *
+     * @return array
+     */
+    protected function formatTagOrder($order)
+    {
+        if (empty($order)) {
+            return $order;
+        }
+        $newOrder = [];
+        foreach ((array)$order as $current) {
+            $newOrder[] = $current == 'tag'
+                ? new Expression('lower(tag)') : $current;
+        }
+        return $newOrder;
+    }
+
     /**
      * Get Resource Tags
      *
@@ -502,7 +523,7 @@ class ResourceTags extends Gateway
         if (null !== $tagId) {
             $select->where->equalTo('resource_tags.tag_id', $tagId);
         }
-        $select->order($order);
+        $select->order($this->formatTagOrder($order));
 
         if (null !== $page) {
             $select->limit($limit);
diff --git a/module/VuFind/src/VuFind/Db/Table/Tags.php b/module/VuFind/src/VuFind/Db/Table/Tags.php
index d0fb645df71fa799643f2398c1e087f9dca341a5..9d0529954c118aa749cba9bdc791d5aaf857dcad 100644
--- a/module/VuFind/src/VuFind/Db/Table/Tags.php
+++ b/module/VuFind/src/VuFind/Db/Table/Tags.php
@@ -198,9 +198,9 @@ class Tags extends Gateway
                 $select->group(['tags.id', 'tag']);
 
                 if ($sort == 'count') {
-                    $select->order(['cnt DESC', 'tags.tag']);
+                    $select->order(['cnt DESC', new Expression('lower(tags.tag)')]);
                 } else if ($sort == 'tag') {
-                    $select->order(['tags.tag']);
+                    $select->order([new Expression('lower(tags.tag)')]);
                 }
 
                 if ($limit > 0) {
@@ -284,14 +284,14 @@ class Tags extends Gateway
             $select->group(['tags.id', 'tags.tag']);
             switch ($sort) {
             case 'alphabetical':
-                $select->order(['tags.tag', 'cnt DESC']);
+                $select->order([new Expression('lower(tags.tag)'), 'cnt DESC']);
                 break;
             case 'popularity':
-                $select->order(['cnt DESC', 'tags.tag']);
+                $select->order(['cnt DESC', new Expression('lower(tags.tag)')]);
                 break;
             case 'recent':
                 $select->order(
-                    ['posted DESC', 'cnt DESC', 'tags.tag']
+                    ['posted DESC', 'cnt DESC', new Expression('lower(tags.tag)')]
                 );
                 break;
             }