1.,2.,3.,4. done NEEDS CLEANUP