Split core into a more logical hierarchy