update original implementation