public Map push(String id){
  if (order.contains(id))   throw new RuntimeException(id + " already present");
  if (!order.isEmpty() && id.equals(order.peek()))   return (Map)id2map.get(id);
  Map result=(Map)id2map.get(id);
  if (result == null) {
    result=new HashMap();
    id2map.put(id,result);
  }
  order.push(id);
  return result;
}

public Map push ( String id ) { if ( order . contains ( id ) ) throw new RuntimeException ( id + " already present" ) ; if ( ! order . isEmpty ( ) && id . equals ( order . peek ( ) ) ) return ( Map ) id2map . get ( id ) ; Map result = ( Map ) id2map . get ( id ) ; if ( result == null ) { result = new HashMap ( ) ; id2map . put ( id , result ) ; } order . push ( id ) ; return result ; }
move to a different id ( meaning add a new named map to proxy which can be calved off if necessary ) .
