private static void ReSortControls()
        {
            MetadataDocumentManagement metaDataDocMgt = MetadataDocumentManagement.Instance;

            XmlNode cntrlNode          = metaDataDocMgt.XmlCurrentFormNode.SelectSingleNode(@"./a:Controls/a:ContentArea", metaDataDocMgt.XmlNamespaceMgt);
            XmlNode currCntrlContainer = null;

            if (cntrlNode != null)
            {
                XmlNode currNode = cntrlNode.SelectSingleNode(@"./a:Properties", metaDataDocMgt.XmlNamespaceMgt);
                foreach (KeyValuePair <string, ControlType1> control in controlsSequence)
                {
                    XmlNode controlNode;
                    switch (control.Value)
                    {
                    case ControlType1.OptionButton:
                        controlNode = cntrlNode.SelectSingleNode(@"./a:Control[./a:Properties/a:ID='" + control.Key + "']", metaDataDocMgt.XmlNamespaceMgt);
                        if (controlNode == null)
                        {
                            break;
                        }

                        String optionCaptionML = GetProperty(controlNode, "OptionCaptionML");
                        if (!string.IsNullOrEmpty(optionCaptionML))
                        {
                            bool breakWork = false;
                            ResortControlsForTrendscape(ref currCntrlContainer, cntrlNode, currNode, controlNode, ref breakWork, optionCaptionML);
                            if (breakWork)
                            {
                                break;
                            }
                        }

                        currCntrlContainer = null;
                        currNode           = cntrlNode.InsertAfter(controlNode.ParentNode.RemoveChild(controlNode), currNode);
                        break;

                    case ControlType1.TextBox:
                    case ControlType1.CheckBox:
                        controlNode = cntrlNode.SelectSingleNode(@"./a:Control[./a:Properties/a:ID='" + control.Key + "']", metaDataDocMgt.XmlNamespaceMgt);

                        // to avoid sorting problems with new groups.
                        if (controlNode == null)
                        {
                            XmlNode groupControl = cntrlNode.SelectSingleNode(@"./a:Group[./a:Control/a:Properties/a:ID='" + control.Key + "']", metaDataDocMgt.XmlNamespaceMgt);
                            if (groupControl == null)
                            {
                                break;
                            }

                            if (currNode.Equals(groupControl))
                            {
                                break;
                            }

                            XmlNode controlForCheck = cntrlNode.SelectSingleNode(@".//a:Control[./a:Properties/a:ID='" + control.Key + "']", metaDataDocMgt.XmlNamespaceMgt);
                            if ((groupControl.ChildNodes.Count > 2) && (!groupControl.ChildNodes[1].Equals(controlForCheck))) // so it's the first control in the group
                            {
                                break;
                            }

                            controlNode = groupControl;
                        }

                        XmlNode removedTempNode = controlNode.ParentNode.RemoveChild(controlNode);
                        currNode = cntrlNode.InsertAfter(removedTempNode, currNode);
                        break;

                    case ControlType1.Frame:
                    case ControlType1.TabControl:
                    case ControlType1.TableBox:
                        controlNode = cntrlNode.SelectSingleNode(@"./a:Group[./a:Properties/a:ID='" + control.Key + "']", metaDataDocMgt.XmlNamespaceMgt);
                        if (controlNode == null)
                        {
                            break;
                        }

                        currCntrlContainer = null;
                        currNode           = cntrlNode.InsertAfter(controlNode.ParentNode.RemoveChild(controlNode), currNode);
                        break;

                    case ControlType1.Subform:
                        controlNode = cntrlNode.SelectSingleNode(@"./a:Control[./a:Properties/a:ID='" + control.Key + "']", metaDataDocMgt.XmlNamespaceMgt);
                        if (controlNode == null)
                        {
                            break;
                        }

                        currCntrlContainer = null;
                        currNode           = cntrlNode.InsertAfter(controlNode.ParentNode.RemoveChild(controlNode), currNode);
                        break;

                    case ControlType1.Label:
                        if (PageControls.IsObjectHasIndentation(metaDataDocMgt.GetCurrentPageId))
                        {
                            goto case ControlType1.TableBox;
                        }

                        break;

                    default:
                        break;
                    }
                }
            }
        }