diff --git a/src/plugins/cppeditor/cppeditor.cpp b/src/plugins/cppeditor/cppeditor.cpp
index 3544cf3f2d33345e9bdc0435b4a6414f1a3e5bca..d6c253095137a4438541f54168d1ddb4c8e5347b 100644
--- a/src/plugins/cppeditor/cppeditor.cpp
+++ b/src/plugins/cppeditor/cppeditor.cpp
@@ -75,6 +75,7 @@
 #include <QtGui/QTextEdit>
 #include <QtGui/QComboBox>
 #include <QtGui/QTreeView>
+#include <QtGui/QSortFilterProxyModel>
 
 using namespace CPlusPlus;
 using namespace CppEditor::Internal;
@@ -239,11 +240,17 @@ void CPPEditor::createToolBar(CPPEditorEditable *editable)
     QTreeView *methodView = new OverviewTreeView;
     methodView->header()->hide();
     methodView->setItemsExpandable(false);
+    methodView->setSortingEnabled(true);
+    methodView->sortByColumn(0, Qt::AscendingOrder);
     m_methodCombo->setView(methodView);
     m_methodCombo->setMaxVisibleItems(20);
 
     m_overviewModel = new OverviewModel(this);
-    m_methodCombo->setModel(m_overviewModel);
+    m_proxyModel = new QSortFilterProxyModel(this);
+    m_proxyModel->setSourceModel(m_overviewModel);
+    m_proxyModel->setDynamicSortFilter(true);
+    m_proxyModel->setSortCaseSensitivity(Qt::CaseInsensitive);
+    m_methodCombo->setModel(m_proxyModel);
 
     connect(m_methodCombo, SIGNAL(activated(int)), this, SLOT(jumpToMethod(int)));
     connect(this, SIGNAL(cursorPositionChanged()), this, SLOT(updateMethodBoxIndex()));
@@ -366,7 +373,7 @@ void CPPEditor::updateFileName()
 
 void CPPEditor::jumpToMethod(int)
 {
-    QModelIndex index = m_methodCombo->view()->currentIndex();
+    QModelIndex index = m_proxyModel->mapToSource(m_methodCombo->view()->currentIndex());
     Symbol *symbol = m_overviewModel->symbolFromIndex(index);
     if (! symbol)
         return;
@@ -394,7 +401,7 @@ void CPPEditor::updateMethodBoxIndex()
 
     if (lastIndex.isValid()) {
         bool blocked = m_methodCombo->blockSignals(true);
-        m_methodCombo->setCurrentIndex(lastIndex.row());
+        m_methodCombo->setCurrentIndex(m_proxyModel->mapFromSource(lastIndex).row());
         updateMethodBoxToolTip();
         (void) m_methodCombo->blockSignals(blocked);
     }
diff --git a/src/plugins/cppeditor/cppeditor.h b/src/plugins/cppeditor/cppeditor.h
index ae352b8d6d503e9b7afa6b47ffb4d24ef4be6f84..7ef5e720a44fb785bdae54a8d7227aa20d349457 100644
--- a/src/plugins/cppeditor/cppeditor.h
+++ b/src/plugins/cppeditor/cppeditor.h
@@ -37,6 +37,7 @@
 
 QT_BEGIN_NAMESPACE
 class QComboBox;
+class QSortFilterProxyModel;
 QT_END_NAMESPACE
 
 namespace CPlusPlus {
@@ -161,6 +162,7 @@ private:
     QList<int> m_contexts;
     QComboBox *m_methodCombo;
     CPlusPlus::OverviewModel *m_overviewModel;
+    QSortFilterProxyModel *m_proxyModel;
 };
 
 } // namespace Internal