public Fraction getValue() {
        CalculationEntry aItem;
        CalculationEntry bItem;
        CalculationEntry opItem;
        Fraction returnValue = Fraction.ZERO;
        boolean illegalCalculation = false;

        Operation operation;
        Fraction a = Fraction.ZERO;
        Fraction b = Fraction.ZERO;

        LinkedList<CalculationEntry> tempList = 
            new LinkedList<CalculationEntry>(listOfCalculationItems);

        // Without the folling if statements, this method always
        // returns 0 if there are less than three elements in
        // listOfCalculationItems
        if (tempList.size() == 0) {
            return Fraction.ZERO;
        } else if (tempList.size() <= 2) {
            aItem = tempList.pop(); // short for aItem

            if (aItem.representsFraction()) {
                return aItem.getFraction();
            }
            else{
                return Fraction.ZERO;
            }
        }

        while (tempList.size() >= 3) {
            aItem = tempList.pop();
            opItem = tempList.pop();
            bItem = tempList.pop();

            illegalCalculation = aItem.representsOperation() ||
                opItem.representsFraction() || 
                bItem.representsOperation();

            if (illegalCalculation) {
                // TODO: Throw exception?
                returnValue = Fraction.ZERO;
                System.out.println("OperationFailed");
                break;
            }

            a = aItem.getFraction();
            b = bItem.getFraction();
            operation = opItem.getOperation();

            returnValue = operation.apply(a, b);
            tempList.push(CalculationEntry.fraction(returnValue));
        }

        /* The contents of this calculation does not matter; only the
         * end-result does.
         */
        this.clear();
        listOfCalculationItems.addAll(tempList);

        return returnValue.reduce();
    }