added variations implementation