public static String complexVariableOption(String prompt, String[] opts, int startValid,
            Collection<Integer> additionalOpts, char defaultOption){
        
        //do the validation
        String input;
        String prefix = Character.isDigit(defaultOption) ? "I" : "C";
        String response = prefix + Character.toString(defaultOption).toUpperCase();//this must be reset later
        boolean validResponse = false;
        
        System.out.print(CFormat.NL + prompt + "  [" + defaultOption + "]");
        printOptions(opts);
        
        do{
            input = keyboard.nextLine().trim().toUpperCase();
            
            //if default is selected, return default
            if(input.equals("")){
                return response;
            }
            
            //if input is an integer, test additionalOpts for a match
            if(isInteger(input)){
                Integer i = Integer.parseInt(input);
                if(additionalOpts.contains(i)){
                    response = "I" + input;
                    validResponse = true;
                }
                
            //if input is not an integer, test against valid string options
            } else {
                for(int i = startValid; i < opts.length; i++){
                    if(opts[i].toUpperCase().charAt(0)==input.charAt(0)){
                        response = "C"+opts[i].substring(0,1).toUpperCase();
                        validResponse = true;
                    }
                }
            }
            
            //if invalid, repeat process
            if(!validResponse){
                System.out.println("Invalid Entry.  "
                        + "Please choose from the following:");
                printOptions(opts);
            }
            
        }while(!validResponse);
        
        return response;
        
    }