Zip rewritten from scratch

(I hope I managed a clean branch this time...)