added more implementations