init
parts 1, 2
done
refactored