      - returns: An instruction as a `String`.
      */
     public func string(for obj: Any?, legIndex: Int?, numberOfLegs: Int?, roadClasses: RoadClasses? = RoadClasses([]), modifyValueByKey: ((TokenType, String) -> String)?) -> String? {
+        guard let obj = obj else {
+            return nil
+        }
+        
+        var modifyAttributedValueByKey: ((TokenType, NSAttributedString) -> NSAttributedString)?
+        if let modifyValueByKey = modifyValueByKey {
+            modifyAttributedValueByKey = { (key: TokenType, value: NSAttributedString) -> NSAttributedString in
+                return NSAttributedString(string: modifyValueByKey(key, value.string))
+            }
+        }
+        return attributedString(for: obj, legIndex: legIndex, numberOfLegs: numberOfLegs, roadClasses: roadClasses, modifyValueByKey: modifyAttributedValueByKey)?.string
+    }
+    
+    /**
+     Creates an instruction as an attributed string given a step and options.
+     
+     - parameter obj: The step to format.
+     - parameter attrs: The default attributes to use for the returned attributed string.
+     - parameter legIndex: Current leg index the user is currently on.
+     - parameter numberOfLegs: Total number of `RouteLeg` for the given `Route`.
+     - parameter roadClasses: Option set representing the classes of road for the `RouteStep`.
+     - parameter modifyValueByKey: Allows for mutating the instruction at given parts of the instruction.
+     - returns: An instruction as an `NSAttributedString`.
+     */
+    public func attributedString(for obj: Any, withDefaultAttributes attrs: [String : Any]? = nil, legIndex: Int?, numberOfLegs: Int?, roadClasses: RoadClasses? = RoadClasses([]), modifyValueByKey: ((TokenType, NSAttributedString) -> NSAttributedString)?) -> NSAttributedString? {
         guard let step = obj as? RouteStep else {
             return nil
         }

    /**
     Creates an instruction given a step and options.
     
     - parameter step: 
     - parameter legIndex: Current leg index the user is currently on.
     - parameter numberOfLegs: Total number of `RouteLeg` for the given `Route`.
     - parameter roadClasses: Option set representing the classes of road for the `RouteStep`.

            instruction = obj
        } else if let _ = step.exitCodes?.first, let obj = instructionObject["exit"] {
            instruction = obj
        } else if !wayName.string.isEmpty, let obj = instructionObject["name"] {
            instruction = obj
        } else {
            instruction = instructionObject["default"]!
