refactor after review