Separated functionality into more classes so that consumers may use it as they require.