             y = (height - sideLength) / 2
         }
         
-        let halfLineWidth = boxLineWidth / 2
-        return CGRect(x: x + halfLineWidth, y: y + halfLineWidth, width: sideLength - boxLineWidth, height: sideLength - boxLineWidth)
+        let halfLineWidth = containerLineWidth / 2
+        return CGRect(x: x + halfLineWidth, y: y + halfLineWidth, width: sideLength - containerLineWidth, height: sideLength - containerLineWidth)
     }
     
-    var boxPath: UIBezierPath {
-        return UIBezierPath(rect: boxFrame)
+    var containerPath: UIBezierPath {
+        if circular {
+            return UIBezierPath(ovalInRect: containerFrame)
+        } else {
+            return UIBezierPath(rect: containerFrame)
+        }
     }
     var checkPath: UIBezierPath {
-        let inset = (boxLineWidth + checkLineWidth) / 2
-        let innerRect = CGRectInset(boxFrame, inset, inset)
+        let containerFrame = self.containerFrame
+        
+        // Add an offset for circular checkbox
+        let offset = circular ? CGFloat(1.0 / 8) * containerFrame.width : 0
+        let inset = ((containerLineWidth + checkLineWidth) / 2) + offset
+        var innerRect = CGRectInset(containerFrame, inset, inset)
+        innerRect.origin = CGPoint(x: innerRect.origin.x, y: innerRect.origin.y + (offset / 4))
+        
+        // Create check path
         let path = UIBezierPath()
         
         let unit = innerRect.width / 8

    public override func layoutSubviews() {
        super.layoutSubviews()
        
        layoutLayers()
    }
    
    // MARK: Layout layers
    private func layoutLayers() {
        boxLayer.frame = bounds
        boxLayer.lineWidth = boxLineWidth
        boxLayer.path = boxPath.CGPath
        
        checkLayer.frame = bounds
        checkLayer.lineWidth = checkLineWidth

    }
    
    func customInitialization() {
        // Initial colors
        checkLayer.fillColor = UIColor.clearColor().CGColor
        
        // Color and layout layers
        colorLayers()
        layoutLayers()
        
        // Add layers
        layer.addSublayer(containerLayer)
        layer.addSublayer(checkLayer)
    }
    
