First working version.

@jone @phgross Please review :)

Please take a closer look at my documentation wording and class/interface/whatever naming.