recursive edit