This is a very large task, but it could start more simply as only supporting undoing/redoing object transformations.