Hi, I am continuing to work on my marking stuff; it's working really well, actually. I am currently importing a list of student names and emails from a csv file -- this is normally how I get the list of enrolled students. I have modified the defauly settings from our Universities CSV export so I get these files in the form: Student Name,Email Student One, em.address@utoronto.ca Student Two, em.address2@utoronto.ca I then parse this into a list, each element of which is itself a list ("Student One" "em.address@utoronto.ca"), etc. This is OK, but not very robust. I would like instead to set *properties*, in case the CSV file has some other ordering of fields. So I've tried this: (defun parse-plist-csv-file (file) (interactive (list (read-file-name "CSV file: "))) (let ((buf (find-file-noselect file)) (result nil)) (with-current-buffer buf (goto-char (point-min)) (let ((header (split-string (buffer-substring-no-properties (line-beginning-position) (line-end-position)) ",")) ) (while (not (eobp)) (let ((line (split-string (buffer-substring-no-properties (line-beginning-position) (line-end-position)))) (count 0) (new-plist '())) (while (< count (length line)) (setq plist-new (plist-put new-plist '(nth count header) (nth count line))) (setq count (1+ count))) (push new-plist result) (forward-line 1)))) (reverse result)))) The line that's not working here is: (setq plist-new (plist-put new-plist '(nth count header) (nth count line))) which just inserts nil nil into 'new-plist. Obviously I'm making some elementary elsip mistake, but my elisp is too weak to figure it out. Can you guys help? thanks, Matt