diff --git a/app/controller.cpp b/app/controller.cpp
index db6a33327f15b56f6383612ec4aa493b87e4151f..7c4b9d4e02488601e9b403bed6c5301c310506fb 100644
--- a/app/controller.cpp
+++ b/app/controller.cpp
@@ -7,14 +7,12 @@ Controller::Controller(MainWindow *window) : eltCollection(), genStatus(), main(
     eltCollection.insertColumns(0,8);
     //QThread* thread = QThread::create([this]{ eltCollection.update();});
     //thread->start();
-    //QElapsedTimer t;
-    //t.start();
+
     main->set_task(&eltCollection);
-    //qDebug() << "setModel : " << t.elapsed() << "milliseconds";
 
     QTimer *timer = new QTimer();
     timer->connect(timer, SIGNAL(timeout()), this , SLOT(update()));
-    timer->start(5000);
+    timer->start(1000);
 
 }
 
@@ -25,8 +23,9 @@ void Controller::update(){
     main->set_task(&elm);
 
     //QElapsedTimer timer;
+    //timer.start();
     eltCollection.update();
-
+    //qDebug() << "update : " << timer.elapsed() << "milliseconds";
 
     //timer.start();
     main->set_task(&eltCollection);
diff --git a/app/elementstablemodel.cpp b/app/elementstablemodel.cpp
index 89e4c68689df5a9b729d4bb130d06557d6ee1b62..37af6b9e2ce646baab714b6a455ed65da41f2f71 100644
--- a/app/elementstablemodel.cpp
+++ b/app/elementstablemodel.cpp
@@ -38,7 +38,7 @@ int ElementsTableModel::rowCount(const QModelIndex &parent) const
     if (parent.isValid())
         return 0;
 
-    return taskMap.size();
+    return taskVector.size();
 
     // FIXME: Implement me!
 }
@@ -67,26 +67,29 @@ QVariant ElementsTableModel::data(const QModelIndex &index, int role) const
          //it += row;
          //Task * task = it.value();
 
-         int pid = pidVector.at(row);
-         Task task = taskMap.value(pid);
+         //int pid = pidVector.at(row);
+         //Task task = taskMap.value(pid);
+
+         Task* task = taskVector.value(row);
+         //qDebug() << task->print(" ");
 
          switch (col) {
          case 0:
-             return QVariant(task.getPID());
+             return QVariant(task->getPID());
          case 1:
-             return QVariant(task.get_name());
+             return QVariant(task->get_name());
          case 2:
-             return QVariant(task.get_status());
+             return QVariant(task->get_status());
          case 3:
-             return QVariant(task.getPPID());
+             return QVariant(task->getPPID());
          case 4:
-             return QVariant(task.getUser());
+             return QVariant(task->getUser());
          case 5:
-             return QVariant(QString::number(task.getCPU())+"%");
+             return QVariant(QString::number(task->getCPU())+"%");
          case 6:
-             return QVariant(QString::number(task.getMem())+"%");
+             return QVariant(QString::number(task->getMem())+"%");
          case 7:
-             return QVariant(task.getUtime_s());
+             return QVariant(task->getUtime_s());
 
          default:
              break;
@@ -98,20 +101,20 @@ QVariant ElementsTableModel::data(const QModelIndex &index, int role) const
 
 
 
-void ElementsTableModel::insertTask(Task &task, int key){
+void ElementsTableModel::insertTask(Task* task){
     beginInsertRows(QModelIndex(), rowCount(), rowCount());
-    taskMap.insert(key, task);
-    pidVector.append(key);
-    //qDebug() << "insert " << key << ";" + task.print(" ");
+    taskVector.append(task);
+    //pidVector.append(key);
+    //qDebug() << "insert " << task->print(" ");
     endInsertRows();
 }
 
-void ElementsTableModel::removeTask(int key){
-    int row = pidVector.indexOf(key);
-    beginRemoveRows(QModelIndex(), row, row);
-    taskMap.remove(key);
-    pidVector.remove(row);
-    //qDebug() << "remove " << key;
+void ElementsTableModel::removeTask(Task* task){
+    //int row = pidVector.indexOf(key);
+    beginRemoveRows(QModelIndex(), rowCount(), rowCount());
+    taskVector.removeOne(task);
+    //pidVector.remove(row);
+    //qDebug() << "remove " << task->print();
     endRemoveRows();
 }
 
@@ -150,7 +153,7 @@ bool ElementsTableModel::removeColumns(int column, int count, const QModelIndex
 
 void ElementsTableModel::update()
 {
-    //QElapsedTimer timer;
+    QElapsedTimer timer;
     //timer.start();
     system("ls /proc | grep '[0-9]' > .listT");
     //qDebug() << "write tasks list :" << timer.elapsed() << "milliseconds";
@@ -160,54 +163,63 @@ void ElementsTableModel::update()
     }
     QTextStream in(&task_list);
 
-    //timer.start();
+    timer.start();
 
-    QMap<int, Task>::iterator it;
-    for (it = taskMap.begin(); it != taskMap.end(); ++it) it.value().setExist(false);
+    //QVector<Task*>::iterator it;
+    for (int i =0; i < taskVector.size(); ++i)
+    {
+        taskVector.value(i)->setExist(false);
+    }
 
 
     //qDebug() << "fold map :" << timer.elapsed() << "milliseconds";
 
 
     int pid;
+    int i;
+    bool stop;
     while(!in.atEnd()) {
         pid = in.readLine().toInt();
+        //qDebug() << pid;
         //Task* test = find(pid);
 
-        QMap<int, Task>::iterator it = taskMap.find(pid);
+        //QMap<int, Task>::iterator it = taskMap.find(pid);
         //Task& test = it.value();
 
-        //qDebug() << "search in map :" << timer.elapsed() << "milliseconds";
-        //qDebug() << test.print("|");
-
-        if (it == taskMap.end())
+        //QVector<Task*>::iterator it;
+        i = 0;
+        stop = false;
+        while (!stop && i < taskVector.size())
         {
-
-            //timer.start();
-            Task t(pid);
-
-            //qDebug() << "1 task created :" << timer.elapsed() << "milliseconds";
-
-            if (t.isExist())
+            Task* temp = taskVector.value(i);
+            if (temp->getPID() == pid)
             {
-                //timer.start();
-                insertTask(t, pid);
-                //qDebug() << "1 task inserted :" << timer.elapsed() << "milliseconds";
+                temp->update();
+                if (!temp->isExist())
+                {
+                    //timer.start();
+                    removeTask(temp);
+                    //qDebug() << "1 task removed :" << timer.elapsed() << "milliseconds";
+                }
+                stop = true;
             }
-
+            ++i;
         }
-        else
+        if (!stop)
         {
-            it->update();
-
-
-            if (!it->isExist())
+            Task* t = new Task(pid);
+            if (t->isExist())
             {
                 //timer.start();
-                removeTask(pid);
-                //qDebug() << "1 task removed :" << timer.elapsed() << "milliseconds";
+                insertTask(t);
+                //qDebug() << "1 task inserted :" << timer.elapsed() << "milliseconds";
             }
         }
+
+        //qDebug() << "search in map :" << timer.elapsed() << "milliseconds";
+        //qDebug() << test.print("|");
+
+
     }
 
     task_list.close();
@@ -223,8 +235,8 @@ void ElementsTableModel::writeCSV(QFile file)
     {
         QTextStream stream( &file );
         stream << "PID , name , status , PPID , user , CPU , memory , uptime" << endl;
-        foreach (Task t, taskMap) {
-            stream << t.print(" , ") << endl;
+        foreach (Task* t, taskVector) {
+            stream << t->print(" , ") << endl;
         }
 
         //for (QMap<int, Task>::const_iterator it = taskMap.cbegin() ; taskMap.cend() ; ++it)
diff --git a/app/elementstablemodel.h b/app/elementstablemodel.h
index 363829720e73ec694c0e234db87f2cbc1e97f316..26952dd704ca4304331403be045b50c37ae2664a 100644
--- a/app/elementstablemodel.h
+++ b/app/elementstablemodel.h
@@ -32,8 +32,8 @@ public:
 
     QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const override;
 
-    void insertTask(Task &task, int key);
-    void removeTask(int key);
+    void insertTask(Task* task);
+    void removeTask(Task* task);
 
 
     // Add data:
@@ -48,8 +48,8 @@ public:
 
 private:
 
-    QMap<int, Task> taskMap;
-    QVector<int> pidVector;
+    //QMap<int, Task> taskMap;
+    QVector<Task*> taskVector;
     QFile task_list;
 
     QMutex mutex;