public void makeMoveTask(ArrayList<Well> startWells, Well endWell, boolean shouldReverse) {

        //get default dispense amount, can defintitely be a variable (n, TOSET, etc.)
        String dispenseAmount = view.getDefaultDispense();

        MultiTask finalTask = null;
        //if we're just moving one well to the destination, we don't need to make an overarching multitask for it.
        if (startWells.size() == 1) {
            finalTask = makeSingleWellToWellTask(startWells.get(0), endWell, dispenseAmount);
        }
        //else, make a task for every movement and wrap it in a multitask one level up
        else {
            finalTask = new MultiTask("Move" + startWells.size() + "WellsTo1");
            //by default, go to each start well, withdraw, then dispense all in the end well
            for (int i = 0; i < startWells.size(); i++) {
                if (Parser.isNumeric(dispenseAmount)) {
                    String withdraw = String.valueOf(-1*Double.parseDouble(dispenseAmount));
                    finalTask.addTaskToEnd(makeSingleTransaction(startWells.get(i), withdraw, true));
                }
                else {
                    finalTask.addTaskToEnd(makeSingleTransaction(startWells.get(i), dispenseAmount, true));
                }
            }
            if (Parser.isNumeric(dispenseAmount)) {
                String total = String.valueOf(Double.parseDouble(dispenseAmount)*startWells.size());
                finalTask.addTaskToEnd(makeSingleTransaction(endWell, total, false));
            }
            else {
                finalTask.addTaskToEnd(makeSingleTransaction(endWell, "total", false));
            }

        }

        //if use requested to reverse the tasks, do that
        if (shouldReverse) {
        } //TODO: implement a reverse method

        //finally, stick this constructed task on the end and tell the view to update itself
        appendTaskToQueue(finalTask);
    }