I tried to separate in commits that make sense although the first ones don't do anything except create methods/macro.