Extracting more functionality into core libraries
merge