#1 and #2 are working. #4 is untested