implement singleton() and part of combine()