public Map<String,U> getAllEntryArray(){
    synchronized(this.cache){
      Hashtable<String, U> ret = new Hashtable<String, U>();
      this.backing.getAllInGroup(this.group, ret);
      SoftReference<U> obj;
      for(Map.Entry<String,U> ent : ret.entrySet()){
        if((obj = this.cache.get(ent.getKey())) != null){
          ent.setValue(obj.get());
        }else{
          this.cache.put(ent.getKey(), new SoftReference<U>(ent.getValue())); //needed to maintain continuity of soft references. If not for this then a get could return a DIFFERENT instance of what should be the same object!
        }
      }
      return ret;
    }
  }