commit for #4, #16 and #2