no need to pass a flat array