public synchronized void pushTimer(Object object, final String label) {
        // Make sure that we don't keep too many objects:
        if (timers.size() > 32) {
            log("Messenger", "WARNING: Excessive amount of stacks required " +
                    "for timer function – possible memory leak!");
            Iterator<Map.Entry<Object, Stack<TimerResult>>> it = timers.entrySet().iterator();
            while (it.hasNext()) {
                Map.Entry<Object, Stack<TimerResult>> pairs = it.next();
                if ((pairs.getValue()).isEmpty()) {
                    it.remove();
                }
            }
        }
        TimerResult data = new TimerResult(System.currentTimeMillis(), label);
        if (timers.containsKey(object)) {
            timers.get(object).push(data);
        } else {
            Stack<TimerResult> stack = new Stack<TimerResult>();
            stack.push(data);
            timers.put(object, stack);
        }
    }