pls do not explain the typedef here, too :)