diff --git a/kde/src/CallView.cpp b/kde/src/CallView.cpp
index 59a7d68a5d7172d1657062ca415dae8d0958149b..0f196791cadc93fa01f0f113b0472cdc5815e7f7 100644
--- a/kde/src/CallView.cpp
+++ b/kde/src/CallView.cpp
@@ -418,7 +418,6 @@ void CallView::hideOverlay()
    }
    
    m_pCallPendingTransfer = 0;
-   //m_pTransferLE->clear();
 } //hideOverlay
 
 ///Be sure the size of the overlay stay the same
@@ -699,6 +698,23 @@ void CallView::keyPressEvent(QKeyEvent* event) {
    SFLPhone::app()->view()->keyPressEvent(event);
 }
 
+///Move selection using arrow keys
+void CallView::moveSelectedItem( Qt::Key direction )
+{
+   if (direction == Qt::Key_Left) {
+      setCurrentIndex(moveCursor(QAbstractItemView::MoveLeft ,Qt::NoModifier));
+   }
+   else if (direction == Qt::Key_Right) {
+      setCurrentIndex(moveCursor(QAbstractItemView::MoveRight,Qt::NoModifier));
+   }
+   else if (direction == Qt::Key_Up) {
+      qDebug() << "Move up";
+      setCurrentIndex(moveCursor(QAbstractItemView::MoveUp   ,Qt::NoModifier));
+   }
+   else if (direction == Qt::Key_Down) {
+      setCurrentIndex(moveCursor(QAbstractItemView::MoveDown ,Qt::NoModifier));
+   }
+}
 
 /*****************************************************************************
  *                                                                           *
diff --git a/kde/src/CallView.h b/kde/src/CallView.h
index 2f3799d783c3aba6a4567d49a2b1eb64a9bc637a..1274665f9e78aab401a0b68d6d413c98965c9e9d 100644
--- a/kde/src/CallView.h
+++ b/kde/src/CallView.h
@@ -102,6 +102,7 @@ class CallView : public QTreeWidget {
       bool callToCall             ( QTreeWidgetItem *parent, int index, const QMimeData *data, Qt::DropAction action  );
       bool phoneNumberToCall      ( QTreeWidgetItem *parent, int index, const QMimeData *data, Qt::DropAction action  );
       bool contactToCall          ( QTreeWidgetItem *parent, int index, const QMimeData *data, Qt::DropAction action  );
+      void moveSelectedItem       ( Qt::Key direction                                                                 );
 
    private:
       //Mutator
diff --git a/kde/src/SFLPhoneView.cpp b/kde/src/SFLPhoneView.cpp
index 4c7dccdedede859316023834c2c584ec033ee2cb..f2ced26400e080bb82c3bd1fbccd2fb27ad9aeb6 100755
--- a/kde/src/SFLPhoneView.cpp
+++ b/kde/src/SFLPhoneView.cpp
@@ -62,7 +62,7 @@ SFLPhoneView::SFLPhoneView(QWidget *parent)
    ConfigurationManagerInterface& configurationManager = ConfigurationManagerInterfaceSingleton::getInstance();
 
 
-   callTreeModel->setTitle(i18n("Calls"));
+   callView->setTitle(i18n("Calls"));
 
    QPalette pal = QPalette(palette());
    pal.setColor(QPalette::AlternateBase, Qt::lightGray);
@@ -73,7 +73,7 @@ SFLPhoneView::SFLPhoneView(QWidget *parent)
    //                SENDER                                        SIGNAL                             RECEIVER                                            SLOT                                  /
    /**/connect(SFLPhone::model()                     , SIGNAL(incomingCall(Call*))                   , this                                  , SLOT(on1_incomingCall(Call*)                    ));
    /**/connect(SFLPhone::model()                     , SIGNAL(voiceMailNotify(const QString &, int)) , this                                  , SLOT(on1_voiceMailNotify(const QString &, int)  ));
-   /**/connect(callTreeModel                         , SIGNAL(itemChanged(Call*))                    , this                                  , SLOT(updateWindowCallState()                    ));
+   /**/connect(callView                              , SIGNAL(itemChanged(Call*))                    , this                                  , SLOT(updateWindowCallState()                    ));
    /**///connect(SFLPhone::model()                     , SIGNAL(volumeChanged(const QString &, double)), this                                , SLOT(on1_volumeChanged(const QString &, double) ));
    /**/connect(SFLPhone::model()                     , SIGNAL(callStateChanged(Call*))               , this                                  , SLOT(updateWindowCallState()                    ));
    /**/connect(TreeWidgetCallModel::getAccountList() , SIGNAL(accountListUpdated())                  , this                                  , SLOT(updateStatusMessage()                      ));
@@ -127,12 +127,34 @@ QErrorMessage * SFLPhoneView::getErrorWindow()
  *                                                                           *
  ****************************************************************************/
 
+///Input grabber
+void SFLPhoneView::keyPressEvent(QKeyEvent *event)
+{
+   int key = event->key();
+   if(key == Qt::Key_Escape)
+      escape();
+   else if(key == Qt::Key_Return || key == Qt::Key_Enter)
+      enter();
+   else if(key == Qt::Key_Backspace)
+      backspace();
+   else if (key == Qt::Key_Left || key == Qt::Key_Right || key == Qt::Key_Up || key == Qt::Key_Down)
+      callView->moveSelectedItem((Qt::Key)key);
+   else
+   {
+      QString text = event->text();
+      if(! text.isEmpty())
+      {
+         typeString(text);
+      }
+   }
+} //keyPressEvent
+
 ///Called on keyboard
 void SFLPhoneView::typeString(QString str)
 {
    CallManagerInterface & callManager = CallManagerInterfaceSingleton::getInstance();
 
-   Call* call = callTreeModel->getCurrentItem();
+   Call* call = callView->getCurrentItem();
    callManager.playDTMF(str);
    Call *currentCall = 0;
    Call *candidate = 0;
@@ -166,15 +188,15 @@ void SFLPhoneView::typeString(QString str)
 void SFLPhoneView::backspace()
 {
    kDebug() << "backspace";
-   Call* call = callTreeModel->getCurrentItem();
+   Call* call = callView->getCurrentItem();
    if(!call) {
       kDebug() << "Error : Backspace on unexisting call.";
    }
    else {
       call->backspaceItemText();
       if(call->getState() == CALL_STATE_OVER) {
-         if (callTreeModel->getCurrentItem())
-            callTreeModel->removeItem(callTreeModel->getCurrentItem());
+         if (callView->getCurrentItem())
+            callView->removeItem(callView->getCurrentItem());
       }
    }
 }
@@ -183,9 +205,9 @@ void SFLPhoneView::backspace()
 void SFLPhoneView::escape()
 {
    kDebug() << "escape";
-   Call* call = callTreeModel->getCurrentItem();
-   if (callTreeModel->haveOverlay()) {
-      callTreeModel->hideOverlay();
+   Call* call = callView->getCurrentItem();
+   if (callView->haveOverlay()) {
+      callView->hideOverlay();
    }
    else if(!call) {
       kDebug() << "Escape when no item is selected. Doing nothing.";
@@ -204,7 +226,7 @@ void SFLPhoneView::escape()
 void SFLPhoneView::enter()
 {
    kDebug() << "enter";
-   Call* call = callTreeModel->getCurrentItem();
+   Call* call = callView->getCurrentItem();
    if(!call) {
       kDebug() << "Error : Enter on unexisting call.";
    }
@@ -297,7 +319,7 @@ void SFLPhoneView::updateWindowCallState()
 
    enabledActions[SFLPhone::Mailbox] = SFLPhone::model()->getCurrentAccount() && ! SFLPhone::model()->getCurrentAccount()->getAccountDetail(ACCOUNT_MAILBOX).isEmpty();
 
-   call = callTreeModel->getCurrentItem();
+   call = callView->getCurrentItem();
    if (!call) {
       kDebug() << "No item selected.";
       enabledActions[ SFLPhone::Refuse   ] = false;
@@ -642,7 +664,7 @@ void SFLPhoneView::editBeforeCall()
    if(ok) {
       Call* call = SFLPhone::model()->addDialingCall(name);
       call->appendText(newNumber);
-      //callTreeModel->selectItem(addCallToCallList(call));
+      //callView->selectItem(addCallToCallList(call));
       action(call, CALL_ACTION_ACCEPT);
    }
 }
@@ -687,7 +709,7 @@ void SFLPhoneView::accountCreationWizard()
 ///Call
 void SFLPhoneView::accept()
 {
-   Call* call = callTreeModel->getCurrentItem();
+   Call* call = callView->getCurrentItem();
    if(!call) {
       kDebug() << "Calling when no item is selected. Opening an item.";
       SFLPhone::model()->addDialingCall();
@@ -708,7 +730,7 @@ void SFLPhoneView::accept()
 ///Refuse call
 void SFLPhoneView::refuse()
 {
-   Call* call = callTreeModel->getCurrentItem();
+   Call* call = callView->getCurrentItem();
    if(!call) {
       kDebug() << "Error : Hanging up when no item selected. Should not happen.";
    }
@@ -720,7 +742,7 @@ void SFLPhoneView::refuse()
 ///Put call on hold
 void SFLPhoneView::hold()
 {
-   Call* call = callTreeModel->getCurrentItem();
+   Call* call = callView->getCurrentItem();
    if(!call) {
       kDebug() << "Error : Holding when no item selected. Should not happen.";
    }
@@ -732,7 +754,7 @@ void SFLPhoneView::hold()
 ///Transfer a call
 void SFLPhoneView::transfer()
 {
-   Call* call = callTreeModel->getCurrentItem();
+   Call* call = callView->getCurrentItem();
    if(!call) {
       kDebug() << "Error : Transferring when no item selected. Should not happen.";
    }
@@ -744,7 +766,7 @@ void SFLPhoneView::transfer()
 ///Record a call
 void SFLPhoneView::record()
 {
-   Call* call = callTreeModel->getCurrentItem();
+   Call* call = callView->getCurrentItem();
    if(!call) {
       kDebug() << "Error : Recording when no item selected. Should not happen.";
    }
@@ -799,9 +821,10 @@ void SFLPhoneView::on1_volumeChanged(const QString & /*device*/, double value)
       updateVolumeBar(value);
 }
 
+///Send a text message
 void SFLPhoneView::sendMessage()
 {
-   Call* call = callTreeModel->getCurrentItem();
+   Call* call = callView->getCurrentItem();
    if (dynamic_cast<Call*>(call) && !m_pSendMessageLE->text().isEmpty()) {
       call->sendTextMessage(m_pSendMessageLE->text());
    }
diff --git a/kde/src/SFLPhoneView.h b/kde/src/SFLPhoneView.h
index deda7b8907b25f4b4725b64f8cb73e631f7cfc14..49c90b5216b7908f44bdc80284c2e18385cb663f 100755
--- a/kde/src/SFLPhoneView.h
+++ b/kde/src/SFLPhoneView.h
@@ -29,12 +29,9 @@
 class QString;
 class QKeyEvent;
 class QErrorMessage;
-class QListWidget;
 
 //SFLPhone
-class ConfigurationDialog;
 class AccountWizard;
-class CallView;
 
 
 /**
@@ -185,24 +182,7 @@ public slots:
    void updateStatusMessage();
 
 
-   virtual void keyPressEvent(QKeyEvent *event)
-   {
-      int key = event->key();
-      if(key == Qt::Key_Escape)
-         escape();
-      else if(key == Qt::Key_Return || key == Qt::Key_Enter)
-         enter();
-      else if(key == Qt::Key_Backspace)
-         backspace();
-      else
-      {
-         QString text = event->text();
-         if(! text.isEmpty())
-         {
-            typeString(text);
-         }
-      }
-   }
+   virtual void keyPressEvent(QKeyEvent *event);
 
    void displayVolumeControls(bool checked = true);
    void displayDialpad(bool checked = true);
diff --git a/kde/src/ui/SFLPhoneView_base.ui b/kde/src/ui/SFLPhoneView_base.ui
index 9ad0c749aa5d497d20bc778661d2ba6dea781fe5..1fd18a8e3251c57bd940fe4e56406e325bd6313a 100755
--- a/kde/src/ui/SFLPhoneView_base.ui
+++ b/kde/src/ui/SFLPhoneView_base.ui
@@ -15,7 +15,7 @@
   </property>
   <layout class="QVBoxLayout" name="verticalLayout">
    <item>
-    <widget class="CallView" name="callTreeModel" native="true">
+    <widget class="CallView" name="callView" native="true">
      <property name="sizePolicy">
       <sizepolicy hsizetype="Expanding" vsizetype="Expanding">
        <horstretch>0</horstretch>