public ArrayList<DuplicateMusicObject> getDuplicateOnName() throws SQLException {
		
		Run.addProcessStatus("Processing Duplicate Records on Name");
		System.gc();
		
		// This does a running check in 3 places.
		// Here (in case it was stopped before hand)
		// In the main loop (which stops it)
		// And just after it (which returns an empty set)
		if (!isRunning) {
			return new ArrayList<DuplicateMusicObject>();
		}
		
		ArrayList<MusicObject> allMusic = db.getAllSongs();
		
		HashMap<String,DuplicateMusicObject> duplicateList = new HashMap<String,DuplicateMusicObject>();
		HashMap<String,Integer> duplicateNumber = new HashMap<String,Integer>();
		
		int number = 0;
		int rowNo = 0;
		DuplicateMusicObject musicObject = null;
		
		Run.addProcessStatus("Found "+allMusic.size() + " records to check");
				
		for (MusicObject music : allMusic) {
			String key = music.getSongName().toUpperCase();
						
			if (!isRunning) {
				break;
			}
			
			if (duplicateNumber.containsKey(key)) {
				number = duplicateNumber.remove(key);
				musicObject = duplicateList.remove(key);
			} else {
				number = 0;
				musicObject = new DuplicateMusicObject();
				musicObject.setDuplicateCriteria("Duplicate Song Name : " + music.getSongName());
			}
			
			musicObject.addID(music);
			number++;
			
			duplicateNumber.put(key, number);
			duplicateList.put(key, musicObject);
			
			// Keep track of total rows
			rowNo++;
			
			if (rowNo%1000 == 0) {
				Run.addProcessStatus("Records processed : " + duplicateNumber.size()+" - Remaining: " + (allMusic.size()-rowNo) );
				System.gc();
			}
		}
		
		// This is more to catch when the method above cancelled it
		if (!isRunning) {
			return new ArrayList<DuplicateMusicObject>();
		}
		
		for (String key : duplicateNumber.keySet()) {
			if (duplicateNumber.get(key) <= 1) {
				duplicateList.remove(key);
			}
		}
		
		Run.addProcessStatus("Left with " + duplicateList.size() + " records that had potential duplicates on Song and Title Name");
	
		return new ArrayList<DuplicateMusicObject>(duplicateList.values());
	}