changed structure, lots of arguments