merge most of 002b74a8538f99e8bde83459a4cf4b0f51434d8a and 77bde4f9c3164000b21cc36bdfc8cd764e029afd from @derekrazo's style branch, change class name semantics