carefully recursive extend