                 var wall = Wall(width: 1.0, height: 1.0, centerX: 0.0, centerY: 0.0)
                 
                 // width
+                let wallWidthKeyPath = "\(JSONKey.walls) > \(JSONKey.width)"
                 if let width = wallDict["\(JSONKey.width)"] as? Double {
+                    if width < 0.0 { logInvalid(keyPath: wallWidthKeyPath, value: width) }
                     wall.width = width
                 } else {
-                    logMissing(keyPath: "\(JSONKey.walls) > \(JSONKey.width)")
+                    logMissing(keyPath: wallWidthKeyPath)
                 }
                 
                 // height
+                let wallHeightKeyPath = "\(JSONKey.walls) > \(JSONKey.height)"
                 if let height = wallDict["\(JSONKey.height)"] as? Double {
+                    if height < 0.0 { logInvalid(keyPath: wallHeightKeyPath, value: height) }
                     wall.height = height
                 } else {
-                    logMissing(keyPath: "\(JSONKey.walls) > \(JSONKey.height)")
+                    logMissing(keyPath: wallHeightKeyPath)
                 }
                 
                 // x
+                let wallXKeyPath = "\(JSONKey.walls) > \(JSONKey.x)"
                 if let x = wallDict["\(JSONKey.x)"] as? Double {
+                    if x < 0.0 { logInvalid(keyPath: wallXKeyPath, value: x) }
                     wall.centerX = x
                 } else {
-                    logMissing(keyPath: "\(JSONKey.walls) > \(JSONKey.x)")
+                    logMissing(keyPath: wallXKeyPath)
                 }
                 
                 // y
+                let wallYKeyPath = "\(JSONKey.walls) > \(JSONKey.y)"
                 if let y = wallDict["\(JSONKey.y)"] as? Double {
+                    if y < 0.0 { logInvalid(keyPath: wallYKeyPath, value: y) }
                     wall.centerY = y
                 } else {
-                    logMissing(keyPath: "\(JSONKey.walls) > \(JSONKey.y)")
+                    logMissing(keyPath: wallYKeyPath)
                 }
                 
                 self.walls.append(wall)

                }
                
                // x
                if let x = shellDict["\(JSONKey.x)"] as? Double {
                    shell.centerX = x
                } else {
                    logMissing(keyPath: "\(JSONKey.shells) > \(JSONKey.x)")
                }
                
                // y
                if let y = shellDict["\(JSONKey.y)"] as? Double {
                    shell.centerY = y
                } else {
                    logMissing(keyPath: "\(JSONKey.shells) > \(JSONKey.y)")
                }
                
                // heading
                if let heading = shellDict["\(JSONKey.heading)"] as? Double {
                    shell.heading = heading
                } else {
                    logMissing(keyPath: "\(JSONKey.shells) > \(JSONKey.heading)")
                }
                
                self.shells.append(shell)

        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: 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: 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: myTankHeadingKeyPath)
            }
            
            // isMoving
