Mostly working, needs polishing.