code: public synchronized void put(CacheObject obj)
  	{
  		// ensure sweeping is on if we have expiring objects
  		startSweeper();
  		final Object old = map.remove(obj.getKey());
  		if (old != null)
  			tree.remove(old);
  		else
  			ensureSizeLimits();
  		obj.resetTimestamp();
  		map.put(obj.getKey(), obj);
  		tree.put(obj, obj);
  	}
docs: {@inheritDoc}<br>
  If expiring of cache objects is set, and the timestamp of a
  {@link CacheObject} is renewed after it has been put into the cache, a
  new {@link #put(CacheObject)} is required for that object to apply the
  timestamp and keep the cache in a consistent state.