public boolean simpleApply() {
		// retrieving the second OBDD's name
		String secondName = mainGui.getSelectedObdd();
		// checking whether the second OBDD's name is null
		if (secondName == null) {
			// having the GUI controller inform the user that no OBDD was 
			// selected
			guiController.noObddSelected();
			return false;
		}
		// retrieving the second OBDD's stack
		Stack<AbstractObddLayout> secondStack = obddStacks.get(secondName);
		// checking whether the stack is null
		if (secondStack == null) {
			// having the GUI controller inform the user that the second OBDD 
			// couldn't be found
			guiController.noSuchObdd();
			return false;
		}
		// retrieving the current OBDD's variable ordering string
		String varOrdString = stringMap.get(currentName).getFirst();
		// creating the two OBDDs' variable orderings
		VariableOrdering firstVarOrd = 
				VarOrdController.stringToVarOrd(varOrdString);
		VariableOrdering secondVarOrd = VarOrdController.stringToVarOrd
				(stringMap.get(secondName).getFirst());
		// checking whether the two variable orderings are equal
		if (firstVarOrd.getOrdList().equals(secondVarOrd.getOrdList())) {
			// having the GUI controller ask the user for the operation to be 
			// applied on the two OBDDs
			int applyOp = 
					guiController.applyOperation(currentName, secondName);
			// checking whether the dialog was cancelled
			if (applyOp >=0 && applyOp <= 15) {
				// having the GUI controller ask the user for a name for the 
				// new OBDD
				String applyName = guiController.newObddName();
				// as long as the given name is either empty or already taken, 
				// the user is asked to provide another one
				while (improperName(applyName)) {
					// retrieving the new name for the OBDD
					applyName = guiController.improperName(applyName);
					// If the name is null, the dialog was cancelled.
					if (applyName == null) return false;
				}
				// retrieving the two actual OBDDs
				OBDD firstObdd = currentObdd.getObdd();
				OBDD secondObdd = secondStack.peek().getObdd();
				// creating the resulting OBDD
				OBDD applyObdd = 
						firstObdd.apply(secondObdd, applyOp, firstVarOrd);
				// creating the abstract OBDD layout
				AbstractObddLayout abstractObdd = 
						new AbstractObddLayout(applyObdd);
				// 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(applyName, obddStack);
				// retrieving the formula represented by the OBDD and 
				// reducing it
				Formula formula = 
						FormulaController.reduce(applyObdd.toFormula());
				// retrieving the string representing the formula
				String applyFormulaString = formula.toString();
				// storing the variable ordering and formula text field strings
				stringMap.put(applyName, 
						new Pair<String,String>(varOrdString, 
								applyFormulaString));
				// creating the visual OBDD
				VisualObdd visualObdd = new VisualObdd(abstractObdd, 
						mainGui.getObddPane().getSize(),
						!applyObdd.isRobdd(firstVarOrd));
				// setting the current visual OBDD
				currentObdd = visualObdd;
				// setting the current OBDD name
				currentName = applyName;
				// showing the visual OBDD
				guiController.showObdd(currentObdd);
				// updating the field texts
				guiController.updateTextFields(applyName, varOrdString, 
						applyFormulaString);
				// adding the OBDD's name to the OBDD list
				guiController.addToObddList(applyName); 
				return true;
			}
		}
		else {
			// having the GUI controller inform the user that the two
			// variable orderings aren't equal
			guiController.unequalVarOrds();
		}
		return false;
	}