                 self.overlay.append(str)
             }
         }
-        if let ol = kvp["overlays"] {
+        if let ol = kvp[Option.Overlays.rawValue] {
             guard let overlays = ol.map else {
-                fatalError("Non-map overlays \(ol); did you mean to use `use-overlays` instead?")
+                fatalError("Non-map \(Option.Overlays.rawValue) \(ol); did you mean to use `\(Option.UseOverlays.rawValue)` instead?")
             }
             for (name, overlay) in overlays {
 

        self.package = package
        self.allKeys = [String](kvp.keys)

        guard let tool = kvp["tool"]?.string else {
            self.tool = "invalid"
            fatalError("No tool for task \(qualifiedName); did you forget to specify it?")
        }
        self.tool = tool

        if let ol = kvp["use-overlays"] {
            guard let overlays = ol.vector else {
                fatalError("Non-vector use-overlays \(ol); did you mean to use `overlays` instead?")
            }
            for overlay in overlays {
                guard let str = overlay.string else {

    
    private var kvp: [String:ParseValue]

    public enum Option: String {
        case Tool = "tool"
        case UseOverlays = "use-overlays"
        case Overlays = "overlays"
        case Dependencies = "dependencies"

        public static var allOptions: [Option] {
            return [
                    Tool,
                    UseOverlays,
                    Overlays,
                    Dependencies
            ]
        }
    }

    init?(value: ParseValue, unqualifiedName: String, package: Package, importedPath: String) {
        precondition(!unqualifiedName.characters.contains("."), "Task \(unqualifiedName) may not contain a period.")
        guard let kvp = value.map else { return nil }
