add ideas from Petrov