New faster version