refactor stricter and cleaner