2.1 and 2.2 completed by bakaknv