change private to protected
move interface impelementation from MediaCategory to AbstractMediaCategory