@SuppressWarnings("unchecked")
	private void collectCourseChanges(CourseModel model, ArrayList<Change> list) {
		// Copy list and prune
		ArrayList<HashMap<String, Object>> newCourses = new ArrayList<HashMap<String, Object>>();
		for (Object c : courses)
			newCourses.add((HashMap<String, Object>) c);

		for (CourseRec rec : model.getCourses(Source.COURSERA)) {
			// Find new course
			HashMap<String, Object> found = null;
			for (HashMap<String, Object> c : newCourses) {
				if (rec.getShortName().equals(c.get("slug"))) {
					found = c; // Check id as well?
					break;
				}
			}
			if (found == null) {
				list.add(CourseChange.delete(rec));
			} else {
				diffCourse(list, rec, found, model);
				newCourses.remove(found);
			}
		}
		for (HashMap<String, Object> c : newCourses) {
			ArrayList<HashMap<String, Object>> map = extractSessions(c
					.get("id"));
			boolean selfStudy = true;
			for (HashMap<String, Object> one : map) {
				selfStudy &= !getNewScheduled(one);
			}
			String id = String.valueOf(c.get("id"));
			if (id.startsWith("v1-"))
				id = id.substring(3);
			String shortName = (String) c.get("slug");
			String name = (String) c.get("name");
			String description = (String) c.get("description");
			String instructor = getInstructorString(c);
			String link = (String) c.get("homeLink");
			String language = getLanguage(c);
			CourseRec record = new CourseRec(Source.COURSERA, id, shortName,
					name, description, instructor, link, language, selfStudy);
			for (HashMap<String, Object> one : map) {
				record.addOffering(makeOffering(one));
			}
			ArrayList<String> categories = (ArrayList<String>) c
					.get("categories");
			ArrayList<String> universities = getUniversityShortNames(c);
			list.add(CourseChange.add(record, categories, universities));
		}
	}