public void run()
    {
		// Go until told to stop
        while (!stopRequested)
        {
            // Visual search time step
            if (armHand.search_mode==ArmHand.VISUAL_SEARCH)
            {
				if(!armHand.tickVisual(object,obstacle,viaPoint))
                    stopRequested=true;
                Main.refreshDisplay();
            }
            // Execute reach time step
            else if (armHand.search_mode==ArmHand.EXECUTE)
            {
                // Load sound clip if not already loaded
                if(armHand.audible && armHand.rtime==0.0)
                    loadSound();

                if(!armHand.tickReachGesture(tr,object,obstacle))
                    stopRequested=true;

                Main.refreshDisplay();
            }
            try
            {
                sleep(SLP);
            }
            catch(InterruptedException e)
            {}
        }
        Log.println("Reach stopped.");
        // If the action is audible, the hand is contacting the object, and the sound is not finished
        Main.refreshDisplay();
        armHand.enablePanels();
        Main.setTrace(false);
        armHand.finalizeReach(com,object);
        armHand.kill_ifActive();
    }