public void organizeCards() {
        Tree<Card> organizedCards = new Tree<>();
        for (int c = 0; c < this.getNumOrbitComponents(); c++) {
            organizedCards.insert(((CardComponent)this.getSubComponent(c)).getCard(), true);
        }

        Iterator<Card> ci = organizedCards.iterator();
        CardComponent cardComponent;
        int globalVertexOffset = this.vertexBufferGlobalOffset + this.vertexBufferSize;
        int globalTextureCoordsOffset = this.textureCoordsBufferGlobalOffset + this.textureCoordsBufferSize;
        int globalColorOffset = this.colorBufferGlobalOffset + this.colorBufferSize;
        for (int c = 0; c < this.getNumOrbitComponents(); c++) {
            cardComponent = ci.next().getComponent();

            this.setSubComponent(c, cardComponent);

            cardComponent.vertexBufferGlobalOffset = globalVertexOffset;
            cardComponent.textureCoordsBufferGlobalOffset = globalTextureCoordsOffset;
            cardComponent.colorBufferGlobalOffset = globalColorOffset;

            globalVertexOffset += cardComponent.vertexBufferSize;
            globalTextureCoordsOffset += cardComponent.textureCoordsBufferSize;
            globalColorOffset += cardComponent.colorBufferSize;

            this.getSlot(c).unSocket();
            cardComponent.getTracker().setTrackPath(new OrbitTrackerPath(this.getOrbit(c / this.getOrbitComponentCount())));
            cardComponent.getTracker().setTempPath(new LineTrackerPath());
            cardComponent.trackTarget(this.getSlot(c));
        }

        this.animateComponents();
    }