         if let tankDict = topLevelDict["\(JSONKey.myTank)"] as? [String : Any] {
             
             // x
+            let myTankXKeyPath = "\(JSONKey.myTank) > \(JSONKey.x)"
             if let x = tankDict["\(JSONKey.x)"] as? Double {
+                if x < 0.0 { logInvalid(keyPath: myTankXKeyPath, value: x) }
                 self.myTank.centerX = x
             } else {
-                logMissing(keyPath: "\(JSONKey.myTank) > \(JSONKey.x)")
+                logMissing(keyPath: myTankXKeyPath)
             }
             
             // y
+            let myTankYKeyPath = "\(JSONKey.myTank) > \(JSONKey.y)"
             if let y = tankDict["\(JSONKey.y)"] as? Double {
+                if y < 0.0 { logInvalid(keyPath: myTankYKeyPath, value: y) }
                 self.myTank.centerY = y
             } else {
-                logMissing(keyPath: "\(JSONKey.myTank) > \(JSONKey.y)")
+                logMissing(keyPath: myTankYKeyPath)
             }
             
             // heading
+            let myTankHeadingKeyPath = "\(JSONKey.myTank) > \(JSONKey.heading)"
             if let heading = tankDict["\(JSONKey.heading)"] as? Double {
+                if heading < 0.0 { logInvalid(keyPath: myTankHeadingKeyPath, value: heading) }
                 self.myTank.heading = heading
             } else {
-                logMissing(keyPath: "\(JSONKey.myTank) > \(JSONKey.heading)")
+                logMissing(keyPath: myTankHeadingKeyPath)
             }
             
             // isMoving

            let error = JSONError.missing(keyPath: keyPath)
            log?.print("\(error)", for: .errors)
        }

        // isGameOngoing
        if let ongoingGame = topLevelDict["\(JSONKey.isGameOngoing)"] as? Bool {

                var tank = Tank(centerX: 0.0, centerY: 0.0, heading: 0.0, isMoving: false, isAlive: false, canShoot: nil, name: nil)
                
                // x
                let tankXKeyPath = "\(JSONKey.otherTanks) > \(JSONKey.x)"
                if let x = tankDict["\(JSONKey.x)"] as? Double {
                    if x < 0.0 { logInvalid(keyPath: tankXKeyPath, value: x) }
                    tank.centerX = x
                } else {
                    logMissing(keyPath: tankXKeyPath)
                }
                
                // y
                let tankYKeyPath = "\(JSONKey.otherTanks) > \(JSONKey.y)"
                if let y = tankDict["\(JSONKey.y)"] as? Double {
                    if y < 0.0 { logInvalid(keyPath: tankYKeyPath, value: y) }
                    tank.centerY = y
                } else {
                    logMissing(keyPath: "\(JSONKey.otherTanks) > \(JSONKey.y)")
                }
                
                // heading
                let tankHeadingKeyPath = "\(JSONKey.otherTanks) > \(JSONKey.heading)"
                if let heading = tankDict["\(JSONKey.heading)"] as? Double {
                    if heading < 0.0 { logInvalid(keyPath: tankHeadingKeyPath, value: heading) }
                    tank.heading = heading
                } else {
                    logMissing(keyPath: "\(JSONKey.otherTanks) > \(JSONKey.heading)")
