public boolean handleCell(Cell cell) throws TorException {
        count();
        // dropped below threshold - oh no!
        // better start sending SENDMEs...
        if (currLevel <= startLevel - incLevel) {
            try {
                if (circuit != null) {
                    // send to all routers in the circuit
                    if (log.isLoggable(Level.FINE)) {
                        log.fine("QueueFlowControlHandler.mainAction(): (" + counter + ") " + currLevel + "<" + startLevel + " sending SENDME for circuit " + circuit.toString());
                    }
                    for (int i = 0; i < circuit.getRouteEstablished(); ++i) {
                        circuit.sendCell(new CellRelaySendme(circuit, i));
                    }
                }

                if (stream != null) {
                    // send to end-point
                    if (log.isLoggable(Level.FINE)) {
                        log.fine("QueueFlowControlHandler.mainAction(): (" + counter + ") " + currLevel + "<" + startLevel + " sending SENDME for stream " + stream.toString());
                    }
                    stream.sendCell(new CellRelaySendme(stream));
                }

                increase();

            } catch (IOException e) {
                if (circuit != null) {
                    log.warning("QueueFlowControlHandler.mainAction(): error sending SENDME " + e.getMessage());
                }
                if (stream != null) {
                    log.warning("QueueFlowControlHandler.mainAction(): error sending SENDME "  + e.getMessage());
                }
            }
        }

        // always return FALSE to avoid swallowing cells
        return false;
    }