Addresses #34, #32 and #20