Dry up tag saving behavior

Ref #4248
Merge pull request #4610 from novaugust/tag-save-refactor

Dry up tag saving behavior