diff --git a/src/plugins/cpptools/cppcodecompletion.cpp b/src/plugins/cpptools/cppcodecompletion.cpp
index 3813744774c2f91c9a370cb3354a44d9b1ba9afd..fadd940f72760723296087b2826150a114c1fd95 100644
--- a/src/plugins/cpptools/cppcodecompletion.cpp
+++ b/src/plugins/cpptools/cppcodecompletion.cpp
@@ -89,8 +89,7 @@ private slots:
     void previousPage();
 
 private:
-    void update();
-    void close();
+    void updateArgumentHighlight();
     void updateHintText();
 
     Function *currentFunction() const
@@ -103,6 +102,7 @@ private:
     TextEditor::ITextEditor *m_editor;
 
     QWidget *m_pager;
+    QLabel *m_numberLabel;
     QFrame *m_popupFrame;
     QList<Function *> m_items;
     LookupContext m_context;
@@ -225,11 +225,12 @@ FunctionArgumentWidget::FunctionArgumentWidget():
     QHBoxLayout *hbox = new QHBoxLayout(m_pager);
     hbox->setMargin(0);
     hbox->setSpacing(0);
-    hbox->addSpacerItem(new QSpacerItem(0, 0, QSizePolicy::MinimumExpanding, QSizePolicy::Minimum));
     hbox->addWidget(leftArrow);
+    m_numberLabel = new QLabel;
+    hbox->addWidget(m_numberLabel);
     hbox->addWidget(rightArrow);
 
-    QVBoxLayout *layout = new QVBoxLayout;
+    QHBoxLayout *layout = new QHBoxLayout;
     layout->setMargin(0);
     layout->setSpacing(0);
     layout->addWidget(m_pager);
@@ -259,7 +260,7 @@ void FunctionArgumentWidget::showFunctionHint(QList<Function *> functionSymbols,
     if (m_startpos == startPosition)
         return;
 
-    m_popupFrame->hide();
+    m_pager->setVisible(functionSymbols.size() > 1);
 
     m_items = functionSymbols;
     m_context = context;
@@ -268,9 +269,7 @@ void FunctionArgumentWidget::showFunctionHint(QList<Function *> functionSymbols,
 
     // update the text
     m_currentarg = -1;
-    update();
-
-    m_pager->setVisible(functionSymbols.size() > 1);
+    updateArgumentHighlight();
 
     QPoint pos = m_editor->cursorRect(m_startpos).topLeft();
     pos.setY(pos.y() - m_popupFrame->sizeHint().height() - 1);
@@ -294,11 +293,11 @@ void FunctionArgumentWidget::previousPage()
     updateHintText();
 }
 
-void FunctionArgumentWidget::update()
+void FunctionArgumentWidget::updateArgumentHighlight()
 {
     int curpos = m_editor->position();
     if (curpos < m_startpos) {
-        close();
+        m_popupFrame->close();
         return;
     }
 
@@ -323,28 +322,37 @@ void FunctionArgumentWidget::update()
     }
 
     if (parcount < 0)
-        close();
+        m_popupFrame->close();
 }
 
 bool FunctionArgumentWidget::eventFilter(QObject *obj, QEvent *e)
 {
     switch (e->type()) {
-    case QEvent::KeyRelease:
-        {
-            if (static_cast<QKeyEvent*>(e)->key() == Qt::Key_Escape) {
-                close();
-                return false;
+    case QEvent::KeyPress:
+        if (m_items.size() > 1) {
+            QKeyEvent *ke = static_cast<QKeyEvent*>(e);
+            if (ke->key() == Qt::Key_Up) {
+                previousPage();
+                return true;
+            } else if (ke->key() == Qt::Key_Down) {
+                nextPage();
+                return true;
             }
-            update();
-            break;
+            return false;
+        }
+        break;
+    case QEvent::KeyRelease:
+        if (static_cast<QKeyEvent*>(e)->key() == Qt::Key_Escape) {
+            m_popupFrame->close();
+            return false;
         }
+        updateArgumentHighlight();
+        break;
     case QEvent::WindowDeactivate:
     case QEvent::FocusOut:
-        {
-            if (obj != m_editor->widget())
-                break;
-        }
-        close();
+        if (obj != m_editor->widget())
+            break;
+        m_popupFrame->close();
         break;
     case QEvent::MouseButtonPress:
     case QEvent::MouseButtonRelease:
@@ -352,7 +360,7 @@ bool FunctionArgumentWidget::eventFilter(QObject *obj, QEvent *e)
     case QEvent::Wheel: {
             QWidget *widget = qobject_cast<QWidget *>(obj);
             if (! (widget == this || m_popupFrame->isAncestorOf(widget))) {
-                close();
+                m_popupFrame->close();
             }
         }
         break;
@@ -362,11 +370,6 @@ bool FunctionArgumentWidget::eventFilter(QObject *obj, QEvent *e)
     return false;
 }
 
-void FunctionArgumentWidget::close()
-{
-    m_popupFrame->close();
-}
-
 void FunctionArgumentWidget::updateHintText()
 {
     Overview overview;
@@ -374,7 +377,11 @@ void FunctionArgumentWidget::updateHintText()
     overview.setShowArgumentNames(true);
     overview.setMarkArgument(m_currentarg + 1);
     Function *f = currentFunction();
+
     setText(overview(f->type(), f->name()));
+    m_numberLabel->setText(tr("%1 of %2").arg(m_current + 1).arg(m_items.size()));
+
+    m_popupFrame->setFixedWidth(m_popupFrame->minimumSizeHint().width());
 }
 
 CppCodeCompletion::CppCodeCompletion(CppModelManager *manager)