Reasoning: ---------- All the time (position) related concepts are shared between GESTimelineObject and GESTrackObject and currently are repeated at the 2 levels. Moreover, if we want to add the concept of Group we end up with something quite similare to the current GESTimelineObject but that contains GESTimelineObject-s instead of GESTrackObject-s so we could share those informations creating a new class aiming at containing the objects that have that notion of timing. At the same time, we want to clarify namings. First we should remove the word Object in class names, we have been told various times that it sounds just "wrong" for people as Objects are instances and there we are talking about Classes. Class Hierarchy: ------------- <pre><code> <table> <tr> <td> Before: ------- GESTimelineObject GESTimelineSource GESCustomTimelineSource GESTimelineTestSource GESTimelineFileSource GESTimelineTitleSource GESTimelineOperation GESTimelineOverlay GESTimelineTextOverlay GESTimelineTransition GESTimelineTransition GESTimelineEffect GESTimelineParseLaunchEffect GESTimelineLayer GESSimpleTimelineLayer GESTrackObject GESTrackSource GESTrackAudioTestSource GESTrackFileSource GESTrackImageSource GESTrackTitleSource GESTrackVideoTestSource GESTrackOperation GESTrackTransition GESTrackAudioTransition GESTrackVideoTransition GESTrackEffect GESTrackParseLaunchEffect GESTrackTextOverlay </td> <td> After: ------- GESTimelineElement GESContainer GESClip GESSourceClip GESCustomSourceClip GESTestClip GESUriClip GESTitleClip GESOperationClip GESOverlayClip GESTextOverlayClip GESBaseTransitionClip GESTransitionClip GESBaseEffectClip GESEffectClip GESClipGroup GESTrackElement GESSource GESAudioTestSource GESUriSource GESImageSource GESTitleSource GESVideoTestSource GESOperation GESTransition GESAudioTransition GESVideoTransition GESBaseEffect GESEffect GESTextOverlay </td> </tr> </table> </code></pre>