some refactoring, moved extension into separate packages