     let strokeColor = rootNode?.textOutputNode.strokeColor ?? text.strokeColorData?.cgColorValue
     let strokeWidth = rootNode?.textOutputNode.strokeWidth ?? CGFloat(text.strokeWidth ?? 0)
     let tracking = (CGFloat(text.fontSize) * (rootNode?.textOutputNode.tracking ?? CGFloat(text.tracking))) / 1000.0
-    // TODO LINE HEIGHT
     
     let matrix = rootNode?.textOutputNode.xform ?? CATransform3DIdentity
     let ctFont = CTFontCreateWithName(text.fontFamily as CFString, CGFloat(text.fontSize), nil)
+    
+    let textString = textProvider.textFor(keypathName: self.keypathName, sourceText: text.text)
     
     var attributes: [NSAttributedString.Key : Any] = [
       NSAttributedString.Key.font: ctFont,
       NSAttributedString.Key.foregroundColor: fillColor,
       NSAttributedString.Key.kern: tracking,
-      ]
-    
-    if let strokeColor = strokeColor {
-      attributes[NSAttributedString.Key.strokeColor] = strokeColor
-      attributes[NSAttributedString.Key.strokeWidth] = strokeWidth
-    }
-    
-
-    let textString = textProvider.textFor(keypathName: self.keypathName, sourceText: text.text)
+    ]
     
     let paragraphStyle = NSMutableParagraphStyle()
     paragraphStyle.lineSpacing = CGFloat(text.lineHeight)
     paragraphStyle.alignment = text.justification.textAlignment
     attributes[NSAttributedString.Key.paragraphStyle] = paragraphStyle
     
-    let attributedString = NSAttributedString(string: textString, attributes: attributes )
+    let baseAttributedString = NSAttributedString(string: textString, attributes: attributes )
+    
+    if let strokeColor = strokeColor {
+      textStrokeLayer.isHidden = false
+      attributes[NSAttributedString.Key.strokeColor] = strokeColor
+      attributes[NSAttributedString.Key.strokeWidth] = strokeWidth
+    } else {
+      textStrokeLayer.isHidden = true
+    }
+    
+    let attributedString: NSAttributedString = NSAttributedString(string: textString, attributes: attributes )
     
     let framesetter = CTFramesetterCreateWithAttributedString(attributedString)
     

  let interpolatableScale: KeyframeInterpolator<Vector3D>?
  
  let textLayer: DisabledTextLayer = DisabledTextLayer()
  var textProvider: AnimationTextProvider
  
  init(textLayer: TextLayerModel, textProvider: AnimationTextProvider) {

    
    super.init(layer: textLayer, size: .zero)
    contentsLayer.addSublayer(self.textLayer)
    contentsLayer.addSublayer(self.textStrokeLayer)
    self.textLayer.masksToBounds = false
    self.textStrokeLayer.masksToBounds = false
  }
  
  required init?(coder aDecoder: NSCoder) {
