   public let minStemHeight: CGFloat
   public let maxBeamSlope: CGFloat
   public let dotMarginLeft: CGFloat
+  public let outsideStaffLineWidth: CGFloat
+  public let outsideStaffLineXLength: CGFloat
+  public let noteHeadSize: CGSize
+  public let beamLineWidth: CGFloat
 
   public init(
-    staffHeight: CGFloat,
-    staffLineWidth: CGFloat,
-    stemWidth: CGFloat,
-    widthPerUnitNoteLength: CGFloat,
-    barMarginRight: CGFloat,
-    minStemHeight: CGFloat,
-    maxBeamSlope: CGFloat,
-    dotMarginLeft: CGFloat) {
+    staffHeight: CGFloat = 60,
+    staffLineWidth: CGFloat = 1,
+    stemWidth: CGFloat = 2,
+    widthPerUnitNoteLength: CGFloat = 40,
+    barMarginRight: CGFloat = 10,
+    minStemHeight: CGFloat = 30,
+    maxBeamSlope: CGFloat = 0.2,
+    dotMarginLeft: CGFloat = 3,
+    outsideStaffLineWidth: CGFloat = 2,
+    outsideStaffLineXLength: CGFloat = 28.8,
+    noteHeadSize: CGSize = CGSize(width: 18, height: 15),
+    beamLineWidth: CGFloat = 5) {
       self.staffHeight = staffHeight
       self.staffLineWidth = staffLineWidth
       self.stemWidth = stemWidth


    CGContextSetLineWidth(ctx, layout.staffLineWidth)
    CGContextSetStrokeColorWithColor(ctx, UIColor.lightGrayColor().CGColor)
    for i in 0..<5 {
      let offset = staffInterval * CGFloat(i)

      CGContextMoveToPoint(ctx, 0, top + offset)

    let stem = Block()
    let stemHeight = staffInterval * 3
    if (shouldInvert(pitch)) {
      stem.frame = CGRect(
        x: noteHeadFrame.x,
        y: noteHeadFrame.y + noteHeadFrame.height * 0.6,
        width: layout.stemWidth,
        height: stemHeight)
    } else {
      stem.frame = CGRect(
        x: noteHeadFrame.rightTop.x - layout.stemWidth,
        y: noteHeadFrame.y - stemHeight + noteHeadFrame.height * 0.4,
        width: layout.stemWidth,
        height: stemHeight)
    }

    return stem
