works with unsafe-eval