diff --git a/src/plugins/android/androidpackagecreationwidget.cpp b/src/plugins/android/androidpackagecreationwidget.cpp
index c85164d0b881673bb46d0d51f5d19baa3937ff79..ad47b56107091d143910599574de8ba9efb33870 100644
--- a/src/plugins/android/androidpackagecreationwidget.cpp
+++ b/src/plugins/android/androidpackagecreationwidget.cpp
@@ -152,6 +152,7 @@ void PermissionsModel::setPermissions(const QStringList &permissions)
 {
     beginResetModel();
     m_permissions = permissions;
+    qSort(m_permissions);
     endResetModel();
 }
 
@@ -162,9 +163,9 @@ const QStringList &PermissionsModel::permissions()
 
 QModelIndex PermissionsModel::addPermission(const QString &permission)
 {
-    const int idx = m_permissions.count();
+    const int idx = qLowerBound(m_permissions, permission) - m_permissions.constBegin();
     beginInsertRows(QModelIndex(), idx, idx);
-    m_permissions.push_back(permission);
+    m_permissions.insert(idx, permission);
     endInsertRows();
     return index(idx);
 }
@@ -175,8 +176,25 @@ bool PermissionsModel::updatePermission(QModelIndex index, const QString &permis
         return false;
     if (m_permissions[index.row()] == permission)
         return false;
-    m_permissions[index.row()] = permission;
-    emit dataChanged(index, index);
+
+    int newIndex = qLowerBound(m_permissions.constBegin(), m_permissions.constEnd(), permission) - m_permissions.constBegin();
+    if (newIndex == index.row() || newIndex == index.row() + 1) {
+        m_permissions[index.row()] = permission;
+        emit dataChanged(index, index);
+        return true;
+    }
+
+    beginMoveRows(QModelIndex(), index.row(), index.row(), QModelIndex(), newIndex);
+
+    if (newIndex > index.row()) {
+        m_permissions.insert(newIndex, permission);
+        m_permissions.removeAt(index.row());
+    } else {
+        m_permissions.removeAt(index.row());
+        m_permissions.insert(newIndex, permission);
+    }
+    endMoveRows();
+
     return true;
 }