Lots of changes, more flexible as it uses interfaces