Resolves #1, #2, #6 & #11