/// <summary>
        /// Proceed to the next position.
        /// </summary>
        private void NextPosition()
        {
            // update UI
            List <CheckBox> checkboxes = positions.Children.OfType <CheckBox>().ToList();

            checkboxes[configurations.Count].IsChecked = true;

            // start next position
            configurations.Add(currentConfiguration);
            currentStep          = 0;
            currentConfiguration = new PointConfiguration();
            Start();

            // add new UI checkbox if needed
            if (checkboxes.Count == configurations.Count)
            {
                saveButton.IsEnabled = true;

                CheckBox checkbox = new CheckBox();
                checkbox.IsChecked = false;
                checkbox.IsEnabled = false;
                checkbox.Content   = "Middle " + (checkboxes.Count - 3);
                positions.Children.Add(checkbox);
            }
        }
        /// <summary>
        /// Proceed to the next configuration step.
        /// If it is already the last step, configuration will start over at a new position.
        /// </summary>
        public void NextStep()
        {
            currentConfiguration = steps[currentStep].Finish(currentConfiguration);

            if (currentStep + 1 < steps.Length)
            {
                currentStep++;
                Start();
            }
            else
            {
                NextPosition();
            }
        }