no instanceof
some caching
more optimization
bkp list