private boolean checkSelf() {
        boolean isValid = true;

        if (parent != null) {
            if (!parent.isExistentInCli() && isExistentInCli()) {
                selfErrorMessage +="Option " + getName() + " not allowed, "
                            + "if option " + parent.getName() + " not present. ";
                isValid = false;
            }

            if (isValid) {
                if ( isRequired() && (isExistentInCli() != parent.isExistentInCli()) ) {
                    selfErrorMessage += "Option " + getName() + " is required, "
                            + "but MISSING. ";
                    isValid = false;
                } else {
                    if (parent.isExistentInCli()) {
                        boolean checkSelfValuesStatus = checkSelfValues();
                        if ( checkSelfValuesStatus == false ) {
                            selfErrorMessage += "Option " + getName() + " has the following error: " +
                                    valuesErrorMessage;
                            isValid = false;
                        }
                    }
                    if (isValid) {
                        useDefaultValuesForNonExistentValues();
                    }
                }
            }
            return isValid;
        } else { // parent null
            return true;
        }
    }