copy legacy implementation