Implemented #1, #2 and #3.