Adding part I separately as 99% working and Part II is not - yet