diff --git a/core/ajax/share.php b/core/ajax/share.php
index 5c2dbc6654d2257ab454d407dcbbbc0848185071..21e320a4732420948b58c9787b5915553f7db246 100644
--- a/core/ajax/share.php
+++ b/core/ajax/share.php
@@ -354,32 +354,11 @@ if (isset($_POST['action']) && isset($_POST['itemType']) && isset($_POST['itemSo
 						break;
 					}
 				}
-				usort($shareWith, 'sortSearchFirst');
+				$sorter = new \OC\Share\SearchResultSorter($_GET['search'],
+														   'label');
+				usort($shareWith, array($sorter, 'sort'));
 				OC_JSON::success(array('data' => $shareWith));
 			}
 			break;
 	}
 }
-
-
-/**
- * User and Group names matching the search term at the beginning shall appear
- * on top of the share dialog.
- * Callback function for usort. http://php.net/usort
- */
-function sortSearchFirst($a, $b) {
-	$enc = 'UTF-8';
-	$nameA = mb_strtolower($a['label'], $enc);
-	$nameB = mb_strtolower($b['label'], $enc);
-	$term = mb_strtolower($_GET['search'], $enc);
-	$i = mb_strpos($nameA, $term, 0, 'UTF-8');
-	$j = mb_strpos($nameB, $term, 0, 'UTF-8');
-
-	if($i === $j) {
-		return 0;
-	} elseif ($i === 0) {
-		return -1;
-	} else {
-		return 1;
-	}
-}
diff --git a/lib/private/share/searchresultsorter.php b/lib/private/share/searchresultsorter.php
new file mode 100644
index 0000000000000000000000000000000000000000..27f94a694ac68daadae063bfb10801cbe6954a4e
--- /dev/null
+++ b/lib/private/share/searchresultsorter.php
@@ -0,0 +1,53 @@
+<?php
+/**
+ * Copyright (c) 2014 Arthur Schiwon <blizzz@owncloud.bzoc>
+ * This file is licensed under the Affero General Public License version 3 or
+ * later.
+ * See the COPYING-README file.
+ *
+ */
+namespace OC\Share;
+
+class SearchResultSorter {
+	private $search;
+	private $encoding;
+	private $key;
+
+	/**
+	 * @param $search the search term as was given by the user
+	 * @param $key the array key containing the value that should be compared
+	 * against
+	 * @param $encoding optional, encoding to use, defaults to UTF-8
+	 */
+	public function __construct($search, $key, $encoding = 'UTF-8') {
+		$this->encoding = $encoding;
+		$this->key = $key;
+		$this->search = mb_strtolower($search, $this->encoding);
+	}
+
+	/**
+	 * User and Group names matching the search term at the beginning shall appear
+	 * on top of the share dialog.
+	 * Callback function for usort. http://php.net/usort
+	 */
+	public function sort($a, $b) {
+		if(!isset($a[$this->key]) || !isset($b[$this->key])) {
+			\OCP\Util::writeLog('core', 'Sharing: cannot sort due to missing'.
+										'array key', \OC_Log::ERROR);
+			return 0;
+		}
+		$nameA = mb_strtolower($a[$this->key], $this->encoding);
+		$nameB = mb_strtolower($b[$this->key], $this->encoding);
+		$i = mb_strpos($nameA, $this->search, 0, $this->encoding);
+		$j = mb_strpos($nameB, $this->search, 0, $this->encoding);
+
+		if($i === $j) {
+			return 0;
+		} elseif ($i === 0) {
+			return -1;
+		} else {
+			return 1;
+		}
+	}
+}
+