=== modified file 'src/messagingapplication.cpp'
--- src/messagingapplication.cpp	2014-10-17 18:15:29 +0000
+++ src/messagingapplication.cpp	2015-01-09 19:12:59 +0000
@@ -59,6 +59,22 @@
     }
 }
 
+static QString unaccentString(const QString &value)
+{
+    QString s2 = value.normalized(QString::NormalizationForm_D);
+    QString out;
+
+    for (int i=0, j=s2.length(); i<j; i++)
+    {
+        // strip diacritic marks
+        if (s2.at(i).category() != QChar::Mark_NonSpacing &&
+            s2.at(i).category() != QChar::Mark_SpacingCombining) {
+            out.append(s2.at(i));
+        }
+    }
+    return out;
+}
+
 MessagingApplication::MessagingApplication(int &argc, char **argv)
     : QGuiApplication(argc, argv), m_view(0), m_applicationIsReady(false)
 {
@@ -270,3 +286,11 @@
     return QString();
 }
 
+int MessagingApplication::indexOf(const QString &string, const QString &value)
+{
+    const QString normalizedString(unaccentString(string.toLower()));
+    const QString normalizedValue(unaccentString(value.toLower()));
+    
+    return normalizedString.indexOf(normalizedValue);
+}
+

=== modified file 'src/messagingapplication.h'
--- src/messagingapplication.h	2014-07-01 18:08:32 +0000
+++ src/messagingapplication.h	2015-01-09 19:12:59 +0000
@@ -39,6 +39,7 @@
     QString readTextFile(const QString &fileName);
     QString fileMimeType(const QString &fileName);
     QString contactNameFromVCard(const QString &fileName);
+    int indexOf(const QString &string, const QString &value);
 
 private Q_SLOTS:
     void onViewStatusChanged(QQuickView::Status status);

=== modified file 'src/qml/ContactSearchList.qml'
--- src/qml/ContactSearchList.qml	2014-08-15 19:56:15 +0000
+++ src/qml/ContactSearchList.qml	2015-01-09 19:12:59 +0000
@@ -27,7 +27,6 @@
     id: root
 
     property alias filterTerm: contactModel.filterTerm
-    onFilterTermChanged: console.debug("FILTER :" + filterTerm)
 
     signal phonePicked(string phoneNumber)
 
@@ -100,15 +99,13 @@
                             height: units.gu(2)
                             text: {
                                 // this is necessary to keep the string in the original format
-                                var originalText = contact.displayLabel.label
-                                var lowerSearchText =  filterTerm.toLowerCase()
-                                var lowerText = originalText.toLowerCase()
-                                var searchIndex = lowerText.indexOf(lowerSearchText)
+                                var contactName = contact.displayLabel.label
+                                var searchIndex = application.indexOf(contactName, filterTerm)
                                 if (searchIndex !== -1) {
-                                    var piece = originalText.substr(searchIndex, lowerSearchText.length)
-                                    return originalText.replace(piece, "<b>" + piece + "</b>")
+                                    var piece = contactName.substr(searchIndex, filterTerm.length)
+                                    return contactName.replace(piece, "<b>" + piece + "</b>")
                                 } else {
-                                    return originalText
+                                    return contactName
                                 }
                             }
                             fontSize: "medium"

