don't rely on FML and use a hash set to keep track of ids