public String next() {
		
		final StringBuffer output = new StringBuffer(17);
		
		long val = currentValue;
		// Perform division on a stack
		final Stack<Integer> stack = new Stack<Integer>();

		while (val >= 16) {

			stack.push( Integer.valueOf((int) val % 16) );

			val = val / 16;

		}
		// Append the relevant empty positions with the first element
		// identified
		output.append(StringUtils.leftPad(Character.toString(hexCharArray[(int)val]),
				12 - stack.size(), "0"));
		while (!stack.isEmpty()) {
			output.append(Character.toString(hexCharArray[stack.pop().intValue()]));
		}

		currentValue++;
		
		if(separator == Separator.NONE) {
			
			return output.toString();
			
		} else {
			char delim;
			//Add the character delimeter			
			switch(separator) {
				case HYPHEN: delim = '-'; 
								break;
				case COLON: delim = ':';
								break;
				case SPACE: delim = ' ';
								break;
				case UNDERSCORE: delim = '_';
								break;
				default: delim = ':';
								break;
			}
			
			for(int index = 2; index < 17; index += 3) {
				output.insert(index, delim);
			}
			

		}
		
		return output.toString();
		
	}