+ add history (refactor)