             path.move(to: CGPoint(x: 0, y: gridline.position))
             path.line(to: CGPoint(x: 1, y: gridline.position))
             path.transform(using: chartTransform)
-            let (color, lineParams) = params.lineParams(for: gridline.kind)
-            lineParams.apply(on: path)
-            color.setStroke()
-            path.stroke()
+            path.stroke(with: params.lineParams(for: gridline.kind))
         }
         NSGraphicsContext.restoreGraphicsState()
 
         // Draw labels
+        NSGraphicsContext.saveGraphicsState()
         var previousFrame = CGRect.null
-        let attributes = params.axisLabelAttributes()
+        let attributes = params.axisLabel.attributes
         for gridline in gridlines where gridline.kind == .major {
             guard let label = gridline.label else { continue }
-            let yMid = chartRect.minY + gridline.position * chartRect.height + params.axisLabelFont.pointSize / 4
+            let yMid = chartRect.minY + gridline.position * chartRect.height + params.axisLabel.font.pointSize / 4
 
             let bounds = (label as NSString).boundingRect(with: CGSize(width: 1000, height: 1000),
                                                           options: [], attributes: attributes)

            return ChartTheme.screenParams
        case .presentation:
            return ChartTheme.presentationParams
        case .print:
            return ChartTheme.printParams
        }
    }
}

            path.move(to: CGPoint(x: gridline.position, y: 0))
            path.line(to: CGPoint(x: gridline.position, y: 1))
            path.transform(using: chartTransform)
            path.stroke(with: params.lineParams(for: labeled ? .major : .minor))
        }
        NSGraphicsContext.saveGraphicsState()
        NSRectClip(chartRect)
