Merge code-split branch

Move from monolithic package to a modular one for separation of concerns and ease of maintainance.