in theory, this is more efficient