make better, finish tests and add optional nullables