public Object call()  {

        try {
             boolean output = true;

             while ( !Thread.interrupted() ) {
                try
                    {
                    tags = pinger.ping(remoteAddress);
                    if (tags != null && tags.length !=0 ) {
                        tags[0] += ":" + remoteAddress.getHostAddress();
                        if (!currentlyConnected) {
                            currentlyConnected = true;
                            output = true;
                        }
                    } else {
                        if (currentlyConnected) {
                            currentlyConnected = false;
                            output = true;
                        }
                    }
                } catch (Exception ex) {
                    ex.printStackTrace();
                }

                if (output) {
                    if (currentlyConnected)
                        System.out.println("<~> " + remoteAddress.getHostAddress());
                    else
                        System.out.println(">~< " + remoteAddress.getHostAddress());
                    output = false;
                }
                
                Thread.sleep(pingInterval);
             }
        } catch (Exception ex) {
            System.err.println("Tunnel thread broken " + ex.toString());
        } finally {
           // stop the listner what ever the outcome
            requestListener.shutdown();
        }

       return null;
    }