Major Re-factoring
Clean up