Add #16, extensive improvements