// not synchronized sclass WebThoughtSpace { S globalID; class Webs extends NotifyingList { *() { super(new L); } *(L l) { super(l); } void change() { if (index != null) print("Clearing index"); index = null; websByID = null; } public synchronized L subList(int i, int j) { ret new Webs(list.subList(i, j)); } } new Webs webs; transient Map websByID; transient MultiMap index; new L openQuestions; *() {} *(Web... webs) { addAll(this.webs, webs); } void addWeb(Web web) { webs.add(web); } L indexedNodes(S query) { if (index == null) index = ai_indexWebs(webs); ret index.get(query); } }