add criterion
tries at efficiency improvement
some profiling