Looks like for most of these we need a mutator monad that we can execute to try cut down some of this code duplication