public void remove(WeakReference<Object> wref)
		{
			Set<Entry<Long, List<WeakReference<Object>>>> entrySet = buckets.entrySet();
			// iterate over the buckets
			Iterator<Entry<Long, List<WeakReference<Object>>>> iterator = entrySet.iterator();
			while (iterator.hasNext())
			{
				Entry<Long, List<WeakReference<Object>>> next = iterator.next();
				List<WeakReference<Object>> value = next.getValue();
				if (value != null)
				{
					synchronized (value)
					{
						if (value.contains(wref))
						{
							value.remove(wref);
							if (value.isEmpty())
							{
								// we've removed the last wref with this id,
								// remove the bucket
								iterator.remove();
							}
							break;
						}
					}
				}
			}
		}