Challenge #1 [intermediate]

Basic functionality done. Need to clean and improve.