magically, all three implementations are working