public void putAll(Topology<K> k, Iterable<V> vi) { if (vi!=null) for(V v : vi) put(k, v); }
     public void put(Topology<K> t, V v) {
+            // XXX hack
+            if (t instanceof Atom) t = ((Atom)t).underlying();
         for(Topology<K> ht : h.keySet()) {
             if (t.disjoint(ht)) continue;
             if (t.containsAll(ht) && ht.containsAll(t)) {
             for(V vv : h.get(t)) al.add(vv);
             Object[] vs = new Object[al.size()];
             al.toArray(vs);
-            // XXX hack
-            if (t instanceof Atom) t = ((Atom)t).underlying();
             IntegerTopology it = (IntegerTopology)t;
             for(Range r : it.getRanges()) {
                 min_.add(r.isMinNegInf() ? Long.MIN_VALUE : r.getMin());