public synchronized void reap()
    {
        _log.trace("Running the reaper.");
    	// DON'T FEAR THE REAPPER!!!!!
    	long now = System.currentTimeMillis();
    
    	List<String> mapRemovalList = new LinkedList<String>();
    	for(List<DNSRecord> list : _Cache.values()) {
    		List<DNSRecord> removalList = new LinkedList<DNSRecord>();
    		String key = list.get(0).getName();
    		for(DNSRecord rec : list) {
    			if(rec.isExpired(now)) {
    				removalList.add(rec);
    			}
    		}
    		for(DNSRecord rec : removalList) {
                _log.debug("Removing expired record: " + rec);
    			list.remove(rec);
    		}
    		if(list.size() == 0)
    			mapRemovalList.add(key);
    	}
    	
    	for(String key : mapRemovalList) {
            _log.debug("Removing expired key: " + key);
    		_Cache.remove(key);
    	}
    }