public void dissolve() {
    if (m_element.getParent() instanceof edu.cmu.cs.stage3.alice.core.response.CompositeResponse) {
      authoringTool.getUndoRedoStack().startCompound();
      edu.cmu.cs.stage3.alice.core.response.CompositeResponse parent =
          (edu.cmu.cs.stage3.alice.core.response.CompositeResponse) m_element.getParent();
      int index = parent.componentResponses.indexOf(m_element);
      if (parent instanceof edu.cmu.cs.stage3.alice.core.response.IfElseInOrder) {
        if (!parent.componentResponses.contains(m_element)) {
          index =
              ((edu.cmu.cs.stage3.alice.core.response.IfElseInOrder) parent)
                  .elseComponentResponses.indexOf(m_element);
        }
      }
      Object responses[] = m_components.getArrayValue();
      for (int i = 0; i < responses.length; i++) {
        if (responses[i] instanceof edu.cmu.cs.stage3.alice.core.Response) {
          edu.cmu.cs.stage3.alice.core.Response currentResponse =
              (edu.cmu.cs.stage3.alice.core.Response) responses[i];
          currentResponse.removeFromParent();
          currentResponse.setParent(parent);
          parent.componentResponses.add(index + i, currentResponse);
        }
      }
      m_element.removeFromParent();
      authoringTool.getUndoRedoStack().stopCompound();
    } else if (m_element.getParent()
        instanceof edu.cmu.cs.stage3.alice.core.question.userdefined.Composite) {

      authoringTool.getUndoRedoStack().startCompound();
      edu.cmu.cs.stage3.alice.core.question.userdefined.Composite parent =
          (edu.cmu.cs.stage3.alice.core.question.userdefined.Composite) m_element.getParent();
      int index = parent.getIndexOfChild(m_element);
      if (parent instanceof edu.cmu.cs.stage3.alice.core.question.userdefined.IfElse) {
        if (!parent.components.contains(m_element)) {
          index =
              ((edu.cmu.cs.stage3.alice.core.question.userdefined.IfElse) parent)
                  .elseComponents.indexOf(m_element);
        }
      }

      Object questions[] = m_components.getArrayValue();
      for (int i = 0; i < questions.length; i++) {
        if (questions[i] instanceof edu.cmu.cs.stage3.alice.core.question.userdefined.Component) {
          edu.cmu.cs.stage3.alice.core.question.userdefined.Component currentQuestion =
              (edu.cmu.cs.stage3.alice.core.question.userdefined.Component) questions[i];
          currentQuestion.removeFromParent();
          currentQuestion.setParent(parent);
          parent.components.add(index + i, currentQuestion);
        }
      }
      m_element.removeFromParent();
      authoringTool.getUndoRedoStack().stopCompound();
    } else if (m_element.getParent()
        instanceof edu.cmu.cs.stage3.alice.core.question.userdefined.UserDefinedQuestion) {
      authoringTool.getUndoRedoStack().startCompound();
      edu.cmu.cs.stage3.alice.core.question.userdefined.UserDefinedQuestion parent =
          (edu.cmu.cs.stage3.alice.core.question.userdefined.UserDefinedQuestion)
              m_element.getParent();
      int index = parent.getIndexOfChild(m_element);

      Object questions[] = m_components.getArrayValue();
      for (int i = 0; i < questions.length; i++) {
        if (questions[i] instanceof edu.cmu.cs.stage3.alice.core.question.userdefined.Component) {
          edu.cmu.cs.stage3.alice.core.question.userdefined.Component currentQuestion =
              (edu.cmu.cs.stage3.alice.core.question.userdefined.Component) questions[i];
          currentQuestion.removeFromParent();
          currentQuestion.setParent(parent);
          parent.components.add(index + i, currentQuestion);
        }
      }
      m_element.removeFromParent();
      authoringTool.getUndoRedoStack().stopCompound();
    }
  }