/// <summary>
        /// Creates the upper body skeletal system using the back as a fixed reference point
        /// </summary>
        private void createSkeleton()
        {
            Bone BackU, BackL, ArmUL, ArmUR, ArmLL, ArmLR, ShoulderL, ShoulderR, HipL, HipR, Head,
                 LegLL, LegLR, LegUL, LegUR, FakeHip;

            BackU     = new Bone(mBoneLengthMapping[BoneType.BackUpper], BoneType.BackUpper);
            BackL     = new Bone(mBoneLengthMapping[BoneType.BackLower], BoneType.BackLower);
            ArmUL     = new Bone(mBoneLengthMapping[BoneType.ArmUpperL], BoneType.ArmUpperL);
            ArmUR     = new Bone(mBoneLengthMapping[BoneType.ArmUpperR], BoneType.ArmUpperR);
            ArmLL     = new Bone(mBoneLengthMapping[BoneType.ArmLowerL], BoneType.ArmLowerL);
            ArmLR     = new Bone(mBoneLengthMapping[BoneType.ArmLowerR], BoneType.ArmLowerR);
            ShoulderL = new Bone(mBoneLengthMapping[BoneType.ShoulderL], BoneType.ShoulderL);
            ShoulderR = new Bone(mBoneLengthMapping[BoneType.ShoulderR], BoneType.ShoulderR);
            HipR      = new Bone(mBoneLengthMapping[BoneType.HipR], BoneType.HipR);
            HipL      = new Bone(mBoneLengthMapping[BoneType.HipL], BoneType.HipL);
            Head      = new Bone(mBoneLengthMapping[BoneType.Head], BoneType.Head);
            LegLL     = new Bone(mBoneLengthMapping[BoneType.LegLowerL], BoneType.LegLowerL);
            LegLR     = new Bone(mBoneLengthMapping[BoneType.LegLowerR], BoneType.LegLowerR);
            LegUR     = new Bone(mBoneLengthMapping[BoneType.LegUpperR], BoneType.LegUpperR);
            LegUL     = new Bone(mBoneLengthMapping[BoneType.LegUpperL], BoneType.LegUpperL);
            FakeHip   = new Bone(1f, BoneType.FakeHip);

            mBoneTypeMapping.Add(BoneType.BackUpper, BackU);
            mBoneTypeMapping.Add(BoneType.ArmUpperL, ArmUL);
            mBoneTypeMapping.Add(BoneType.ArmLowerL, ArmLL);
            mBoneTypeMapping.Add(BoneType.ArmUpperR, ArmUR);
            mBoneTypeMapping.Add(BoneType.ArmLowerR, ArmLR);
            mBoneTypeMapping.Add(BoneType.ShoulderL, ShoulderL);
            mBoneTypeMapping.Add(BoneType.ShoulderR, ShoulderR);
            mBoneTypeMapping.Add(BoneType.BackLower, BackL);
            mBoneTypeMapping.Add(BoneType.HipL, HipL);
            mBoneTypeMapping.Add(BoneType.HipR, HipR);
            mBoneTypeMapping.Add(BoneType.Head, Head);
            mBoneTypeMapping.Add(BoneType.LegLowerL, LegLL);
            mBoneTypeMapping.Add(BoneType.LegLowerR, LegLR);
            mBoneTypeMapping.Add(BoneType.LegUpperL, LegUL);
            mBoneTypeMapping.Add(BoneType.LegUpperR, LegUR);

            // Set the orientations accordingly~

            /** Back */
            //BackU.InitialOrientation = ORIENT_UP;
            BackU.setOrientation(BoneOrientation.Up);


            BackU.addChild(ShoulderL);
            BackU.addChild(ShoulderR);
            BackU.Color     = Color.Green;
            BackU.Thickness = .5f;
            /** Shoulders */
            //ShoulderR.InitialOrientation = ORIENT_RIGHT;
            ShoulderL.setOrientation(BoneOrientation.Left);
            //ShoulderL.InitialOrientation = ORIENT_LEFT;
            ShoulderR.setOrientation(BoneOrientation.Right);
            ShoulderL.Color = Color.Chartreuse;
            ShoulderR.Color = Color.Gold;
            /** Left Arm upper */
            ShoulderL.addChild(ArmUL);
            //ArmUL.InitialOrientation = ORIENT_DOWN;
            ArmUL.setOrientation(BoneOrientation.Down);
            ArmUL.Color = Color.OrangeRed;

            /** Right arm upper */
            ShoulderR.addChild(ArmUR);
            //ArmUR.InitialOrientation = ORIENT_DOWN;
            ArmUR.setOrientation(BoneOrientation.Down);
            ArmUR.Color = Color.OrangeRed;
            /** Left arm lower */
            ArmUL.addChild(ArmLL);
            //ArmLL.InitialOrientation = ORIENT_DOWN;
            ArmLL.setOrientation(BoneOrientation.Down);
            ArmLL.Color = Color.OrangeRed;
            /** Right arm lower */
            ArmUR.addChild(ArmLR);
            //ArmLR.InitialOrientation = ORIENT_DOWN;
            ArmLR.setOrientation(BoneOrientation.Down);
            ArmLR.Color = Color.OrangeRed;

            /** Hip and lower legs */
            //HipR.InitialOrientation = ORIENT_RIGHT;
            //HipL.InitialOrientation = ORIENT_LEFT;
            HipR.setOrientation(BoneOrientation.Right);
            HipL.setOrientation(BoneOrientation.Left);


            HipL.Color = Color.Blue;
            HipR.Color = Color.Gray;
            //LegUL.InitialOrientation = ORIENT_DOWN;
            LegUL.setOrientation(BoneOrientation.Down);
            HipL.addChild(LegUL);

            //LegUR.InitialOrientation = ORIENT_DOWN;
            LegUR.setOrientation(BoneOrientation.Down);
            LegUR.Color = LegLR.Color = LegLL.Color = LegUL.Color = Color.DarkRed;

            HipR.addChild(LegUR);

            //LegLL.InitialOrientation = ORIENT_DOWN;
            LegLL.setOrientation(BoneOrientation.Down);
            LegUL.addChild(LegLL);

            //LegLR.InitialOrientation = ORIENT_DOWN;
            LegLR.setOrientation(BoneOrientation.Down);
            LegUR.addChild(LegLR);

            //FakeHip.InitialOrientation = ORIENT_UP;
            FakeHip.setOrientation(BoneOrientation.Up);

            FakeHip.addChild(HipL);
            FakeHip.addChild(HipR);
            FakeHip.addChild(BackU);

            mParentBone = FakeHip;
            mParentBone.DrawingEnabled = false;
            mParentBone.updateOrientation();


            this.mParentBone.TriggerOrientationUpdate();

            debugWritePositions();
        }