huge checkin closes #5 , closes #3 , closes #2 , closes #1