fixes #18 (closed), #29 (closed), #30 (closed), #31 (closed), #32 (closed), #35 (closed) and #36 (closed)