private void loadSteps() {

        // Get document element object
        Element docEle = dom.getDocumentElement();

        // Get the Step names nodes
        NodeList nl = docEle.getElementsByTagName("Step");

        // If node is not null and has children
        if (nl != null && nl.getLength() > 0) {

            // Loop through all children
            for (int i = 0; i < nl.getLength(); i++) {

                // Getting step element
                Element el = (Element) nl.item(i);

                // Getting step id
                String id = el.getAttribute("id");

                // Getting all step messages
                ArrayList messages = new ArrayList();
                NodeList messagesNodeList = el.getElementsByTagName("message");

                // If messages node is not null and has children
                if (messagesNodeList != null && messagesNodeList.getLength() > 0) {

                    // Loop through all children
                    for (int j = 0; j < messagesNodeList.getLength(); j++) {

                        // Getting current message element
                        Element elmsg = (Element) messagesNodeList.item(j);

                        // Appending the message node value to the messages arraylist
                        messages.add(elmsg.getFirstChild().getNodeValue());
                    }
                }

                // Getting keywords in the current state
                ArrayList keywords = getKeywords(el);

                // construct a new State object
                Step step = new Step(id, keywords, messages);

                stepCounter ++;

                // add the state to the states hashmap
                steps.put(id, step);
            }
        }
    }