some rough ideas on undoing... will implement later...