pull more parsing code out from systemd