private void OnAddCluster(ClusterTreeNode parent)
        {
            // avoid many intermediate updates
            myTransformationsObserver.ModuleChanged -= OnTransformationsChanged;

            var newClusterId  = Guid.NewGuid().ToString();
            var captionModule = myPresentation.GetModule <ICaptionModule>();

            captionModule.Add(new Caption(newClusterId, "<new>"));

            myPresentation.DynamicClusters().AddCluster(newClusterId);

            // start new clusters folded
            myPresentation.ClusterFolding().Toggle(newClusterId);

            // update tree
            {
                var clusterNode = new ClusterTreeNode(myPresentation)
                {
                    Parent        = Root,
                    Id            = newClusterId,
                    Caption       = captionModule.Get(newClusterId).DisplayText,
                    IsDragAllowed = false
                };
                Root.Children.Add(clusterNode);

                // register for notifications after tree is built to avoid intermediate states getting notified

                PropertyChangedEventManager.AddHandler(clusterNode, OnSelectionChanged, PropertySupport.ExtractPropertyName(() => clusterNode.IsSelected));

                // nothing ot update
                //myNodeClusterCache = null;
            }

            Root.Children.Single(n => n.Id == newClusterId).IsSelected = true;

            myTransformationsObserver.ModuleChanged += OnTransformationsChanged;
        }