Code is version 1.6, but continue to target 1.5

e.g. use of @Override annotation for an interface implementation is a 1.6ism
Make package methods protected, and write methods public, to allow for extension
Merge branch 'enable_programmatic'