Merged refactoring from development branch.