rename classes and interfaces so that 'Abstract' is used only for abstract classes not interfaces. (+ other confusing class names fixed)