@Override
		public void run()
		{
            CountDownLatch latch = null;
            long lastExtraRequestTime = 0;

            try
            {
                while (fetchStatus)
                {
                    if ( System.currentTimeMillis() - lastExtraRequestTime >= EXTRA_INFO_DELAY )
                    {
                        lastExtraRequestTime = System.currentTimeMillis();
                        latch = new CountDownLatch(3);
                        //sendRequest(new ReportAmpsCommand(), createAmpsListener(latch));
                        sendRequest(new ReportTemperatureCommand(), createTemperatureListener(latch));
                    }
                    else
                        latch = new CountDownLatch(2);

                    sendRequest(new ReportStatusCommand(), createStatusListener(latch));
                    sendRequest(new ReportActualPositionCommand(), createPositionListener(latch));

                    if ( ! latch.await(ROBOT_TIMEOUT, TimeUnit.MILLISECONDS))
                        throw new TimeoutException();
                    else if ( ! connected )
                    {
                        connected = true;
                        if ( connectionlistener != null )
                            connectionlistener.onConnect();
                    }
                }
            }
            catch(Exception ex)
            {
                if ( ex.getClass() == TimeoutException.class )
                {
                    if ( connected )
                        System.err.println("Connection to the motors timed out");
                }
                else
                    ex.printStackTrace();

                // On tue le thread courant et en repart un nouveau
                reset();
            }
		}