refactored #1 and #2