private void swapNodesAll( Node<K, V> a, Node<K, V> b ) {

        if( a.mAllParent == b ) {
            swapNodesAll( b, a );
            return;
        }

        {
            boolean tempColor = a.mAllColor;
            a.mAllColor = b.mAllColor;
            b.mAllColor = tempColor;
        }

        Node<K, V> tempNode;

        if( a.mAllLeft == b ) {

            a.mAllLeft = b.mAllLeft;
            b.mAllLeft = a;
            if( a.mAllLeft != null ) { a.mAllLeft.mAllParent = a; }

            tempNode = a.mAllRight;
            a.mAllRight = b.mAllRight;
            b.mAllRight = tempNode;
            if( a.mAllRight != null ) { a.mAllRight.mAllParent = a; }
            if( b.mAllRight != null ) { b.mAllRight.mAllParent = b; }

            b.mAllParent = a.mAllParent;
            a.mAllParent = b;

            if( b.mAllParent == null ) {
                mAllRoot = b;
            } else if( b.mAllParent.mAllLeft == a ) {
                b.mAllParent.mAllLeft = b;
            } else {
                b.mAllParent.mAllRight = b;
            }

        } else if( a.mAllRight == b ) {
            a.mAllRight = b.mAllRight;
            b.mAllRight = a;
            if( a.mAllRight != null ) { a.mAllRight.mAllParent = a; }

            tempNode = a.mAllLeft;
            a.mAllLeft = b.mAllLeft;
            b.mAllLeft = tempNode;
            if( a.mAllLeft != null ) { a.mAllLeft.mAllParent = a; }
            if( b.mAllLeft != null ) { b.mAllLeft.mAllParent = b; }

            b.mAllParent = a.mAllParent;
            a.mAllParent = b;

            if( b.mAllParent == null ) {
                mAllRoot = b;
            } else if( b.mAllParent.mAllLeft == a ) {
                b.mAllParent.mAllLeft = b;
            } else {
                b.mAllParent.mAllRight = b;
            }

        } else {
            tempNode = a.mAllLeft;
            a.mAllLeft = b.mAllLeft;
            b.mAllLeft = tempNode;
            if( a.mAllLeft != null ) { a.mAllLeft.mAllParent = a; }
            if( b.mAllLeft != null ) { b.mAllLeft.mAllParent = b; }

            tempNode = a.mAllRight;
            a.mAllRight = b.mAllRight;
            b.mAllRight = tempNode;
            if( a.mAllRight != null ) { a.mAllRight.mAllParent = a; }
            if( b.mAllRight != null ) { b.mAllRight.mAllParent = b; }

            tempNode = a.mAllParent;
            a.mAllParent = b.mAllParent;
            b.mAllParent = tempNode;

            if( a.mAllParent == null ) {
                mAllRoot = a;
            } else if( a.mAllParent.mAllLeft == b ) {
                a.mAllParent.mAllLeft = a;
            } else {
                a.mAllParent.mAllRight = a;
            }

            if( b.mAllParent == null ) {
                mAllRoot = b;
            } else if( b.mAllParent.mAllLeft == a ) {
                b.mAllParent.mAllLeft = b;
            } else {
                b.mAllParent.mAllRight = b;
            }
        }
    }