documented customzied functors