             break
         }
 
-        // TODO: Decide way_name with special handling for name and ref
-        var wayName = ""
-        let name = step.names?.first ?? ""
-        let ref = step.codes?.first
-
-        if (!name.isEmpty && ref != nil && name != ref) {
-            wayName = name + " (" + ref! + ")";
-        } else if (name.isEmpty && ref != nil) {
-            wayName = ref!;
-        } else {
-            wayName = name;
+        // Set wayName
+        if type?.description != "rotary" && type?.description != "roundabout" {
+            let name = step.names?.first ?? ""
+            let ref = step.codes?.first
+            if !name.isEmpty, let ref = ref, name != ref {
+                wayName = name + " (" + ref + ")";
+            } else if name.isEmpty, let ref = ref {
+                wayName = ref;
+            } else {
+                wayName = name;
+            }
         }
 
         // Decide which instruction string to use
         // Destination takes precedence over name
         var instruction: String
-        if step.destinations != nil && instructionObject["destination"] != nil {
-            instruction = instructionObject["destination"] as! String
-        } else if wayName != "" && instructionObject["name"] != nil {
-            instruction = instructionObject["name"] as! String
+        if let _ = step.destinations, let obj = instructionObject["destination"] as? String {
+            instruction = obj
+        } else if !wayName.isEmpty, let obj = instructionObject["name"] as? String {
+            instruction = obj
         } else {
             instruction = instructionObject["default"] as! String
         }

                case "way_name": result += wayName
                case "destination": result += destination
                case "exit_number": result += exit
                // TODO: Enable once rotary_name exposed in MBRouteStep
                // case "rotary_name": result += step.rotaryName ?? ""
                case "lane_instruction": result += laneInstruction ?? ""
                case "modifier": result += modifierConstant
                case "direction": result += directionFromDegree(degree: bearing)

        var instructionObject: NSDictionary
        let modesInstructions = instructions["modes"] as? NSDictionary
        let typeInstructions = instructions[type?.description ?? ""] as! NSDictionary
        if let mode = mode, let modesInstructions = modesInstructions, let modesInstruction = modesInstructions[mode.description as Any] as? NSDictionary {
            instructionObject = modesInstruction
        } else if let modifier = modifier, let typeInstruction = typeInstructions[modifier] as? NSDictionary {
            instructionObject = typeInstruction
        } else {
            instructionObject = typeInstructions["default"] as! NSDictionary
        }

        // Special case handling
        var laneInstruction: String?
        var rotaryName = ""
        var wayName = ""
        switch type?.description ?? "turn" {
        case "use lane":
            var laneConfig: String? = ""
