all code by Szymon 'asmCode' Majewski