Playing with OO concepts.
Work done while at YAPC without
incorporate stuff from the modules branch.
Changes from master