       case .Circle:
         maskCircle()
       case .Star:
-        maskStar()
+        maskStarFromString(unwrappedMaskType)
       case .Polygon:
         maskPolygon()
       case .Triangle:
         maskTriangle()
       case .Wave:
-        maskWave()
+        maskWaveFromString(unwrappedMaskType);
       }
-      return
-    }
-    
-    // Mask Star with parameter
-    // Mask Wave with parameter
+    }
   }
   
   // MARK: - Mask

    return path
  }
  
  // MARK: Wave
  
  private func maskWaveBezierPath(waveUp: Bool, waveWidth: CGFloat, waveOffset: CGFloat) -> UIBezierPath {
    let originY = waveUp ? bounds.maxY : bounds.minY

    drawPath(wavePath)
  }
  
  // MARK: - Private helper
  
  private func drawPath(path: UIBezierPath) {
    let maskLayer = CAShapeLayer()
    maskLayer.frame = CGRect(origin: CGPoint.zero, size: bounds.size)
    maskLayer.path = path.CGPath
    layer.mask = maskLayer
  }
  
  private func drawBorderPath(borderPath: UIBezierPath, path: UIBezierPath) {
    // FIXME: borderWidth is always set after mask, so the following code will never be excuted.
    if layer.borderWidth == 0 {
      return
