public boolean obddFromFormula() {
		// retrieving the main GUI's input data
		String obddName = mainGui.getObddNameField().getText();
		String varOrdFieldText = mainGui.getVarOrdField().getText();
		String formulaFieldText = mainGui.getFormulaField().getText();
		int obddTypeNumber = mainGui.getSelectedObddType();
		// As long as the given name is either empty or already taken, the user
		// is asked to provide another one.
		while (improperName(obddName)) {
			// retrieving the new name for the OBDD
			obddName = guiController.improperName(obddName);
			// If the name is null, the dialog was cancelled.
			if (obddName == null) {
				// updating the possibly changed field texts
				guiController.updateTextFields(obddName, varOrdFieldText, 
						formulaFieldText);
				return false;
			}
		}
		// As long as the given variable ordering string doesn't fulfill the 
		// requirements and therefore the variable ordering couldn't be created
		// properly, the user is asked to provide another one.
		while (improperVarOrdString(varOrdFieldText)) {
			// having the GUI controller inform the user that the 
			// variable ordering string doesn't fulfill the requirements and 
			// ask for another one
			varOrdFieldText = guiController.
					improperVarOrdString(varOrdFieldText);
			// If the variable ordering string is null, the dialog was 
			// cancelled.
			if (varOrdFieldText == null) {
				// updating the possibly changed field texts
				guiController.updateTextFields(obddName, varOrdFieldText, 
						formulaFieldText);
				return false;
			}
		}
		// creating the variable ordering
		VariableOrdering varOrd = 
				VarOrdController.stringToVarOrd(varOrdFieldText);
		// As long as the input string doesn't fulfill the requirements and 
		// therefore the formula couldn't be created properly, the user is 
		// asked to provide another one.		
		while (improperFormulaInputString(formulaFieldText)) {
			// having the GUI controller inform the user that the formula input
			// string doesn't fulfill the requirements and ask for another one
			formulaFieldText = guiController.
					improperFormulaInputString(formulaFieldText);
			// If the formula input string is null, the dialog was cancelled. 
			if (formulaFieldText == null) {
				// updating the possibly changed field texts
				guiController.updateTextFields(obddName, varOrdFieldText, 
						formulaFieldText);
				return false;
			}
		}
		// creating the formula
		Formula formula = FormulaController.stringToFormula(formulaFieldText);
		// creating the complete OBDD
		OBDD obdd = formula.toObdd(varOrd);
		// reducing to a QOBDD if one should be generated
		if (obddTypeNumber == 1) obdd = obdd.reduceQ(varOrd);
		// reducing to an ROBDD if one should be generated
		else if (obddTypeNumber == 2) obdd = obdd.reduceR(varOrd);
		// creating the abstract OBDD layout
		AbstractObddLayout abstractObdd = new AbstractObddLayout(obdd);
		// initializing a new stack for the OBDD
		Stack<AbstractObddLayout> obddStack = new Stack<AbstractObddLayout>();
		// pushing the OBDD's first abstract version onto the stack
		obddStack.push(abstractObdd);
		// adding the OBDD's stack to the stack HashMap
		obddStacks.put(obddName, obddStack);
		// storing the variable ordering and formula text field strings
		stringMap.put(obddName, 
				new Pair<String,String>(varOrdFieldText, formulaFieldText));
		// creating the visual OBDD
		VisualObdd visualObdd = new VisualObdd(abstractObdd, 
				mainGui.getObddPane().getSize(), !obdd.isRobdd(varOrd));
		// setting the current visual OBDD
		currentObdd = visualObdd;
		// setting the current OBDD name
		currentName = obddName;
		// showing the visual OBDD
		guiController.showObdd(currentObdd);
		// updating the possibly changed OBDD name, variable ordering string 
		// and formula (input) string
		guiController.updateTextFields(obddName, varOrdFieldText, formulaFieldText);
		// adding the OBDD's name to the OBDD list
		guiController.addToObddList(obddName);
		return true;
	}