more optimization, unrolling some interface calls saves a good amount