Code cleanup

make fields final
try reduce generics-warnings   

TODO:  
- do we need that much generics-hell??
- we should rename generics-parameters to upper-case  read here: [docs.oracle](http://docs.oracle.com/javase/tutorial/java/generics/types.html)
 `class Foo<MetaData> {`  should be  `class Foo<METADATA> {`