now using StateT