     guard documentUpdate == true || animatorUpdate == true else { return }
     
     let text = textDocument.value(frame: frame) as! TextDocument
-    let anchorPoint = interpolatableAnchorPoint?.value(frame: frame) as! Vector3D
-    
-    interpolatableScale?.value(frame: frame)
+
     rootNode?.rebuildOutputs(frame: frame)
     
     let fillColor = rootNode?.textOutputNode.fillColor ?? text.fillColorData.cgColorValue

    self.textDocument = KeyframeInterpolator(keyframes: textLayer.text.keyframes)
    
    self.textProvider = textProvider
    
    // TODO: this has to be somewhere that can be interpolated
    // TODO: look for inspiration from other composite layer
    self.interpolatableAnchorPoint = KeyframeInterpolator(keyframes: textLayer.transform.anchorPoint.keyframes)
    self.interpolatableScale = KeyframeInterpolator(keyframes: textLayer.transform.scale.keyframes)
    
    super.init(layer: textLayer, size: .zero)
    contentsLayer.addSublayer(self.textLayer)

    case .center:
      textAnchor = CGPoint(x: size.width * 0.5, y: baselinePosition)
    }
    let normalizedAnchor = CGPoint(x: textAnchor.x.remap(fromLow: 0, fromHigh: size.width, toLow: 0, toHigh: 1),
                                   y: textAnchor.y.remap(fromLow: 0, fromHigh: size.height, toLow: 0, toHigh: 1))
    
    if textStrokeLayer.isHidden == false {
      if text.strokeOverFill ?? false {
