             } else if !fTextTop {
                 rcText.origin.y =  (rcText.size.height - suggestedSize.height) / 2
             }
-            rcText.size.height = suggestedSize.height
+            rcText.size.height = suggestedSize.height * 1.3 // HACK: work-around
             return rcText
         }()
         layer.addSublayer(textLayer)

            return round(ret * self.scale.height)
        }()

        var attr = [String:AnyObject]()
        attr[NSFontAttributeName] = UIFont(name: "Helvetica", size: fontSize)
        attr[NSForegroundColorAttributeName] = UIColor(CGColor: SwipeParser.parseColor(self.info["textColor"], defaultColor: blackColor))
        processShadow(info, layer: layer)

        let attrString = NSAttributedString(string: text, attributes: attr)
        textLayer.string = attrString

        textLayer.frame = {
            var rcText = layer.bounds
            let setter = CTFramesetterCreateWithAttributedString(attrString)
            let suggestedSize = CTFramesetterSuggestFrameSizeWithConstraints(setter, CFRangeMake(0, attrString.length), nil, CGSizeMake(rcText.width, 99999), nil)
            if fTextBottom {

        var fTextBottom = false
        var fTextTop = false
        let textLayer = CATextLayer()
        textLayer.wrapped = true // HACK: why specifying the linebreakmode is not enough?

        let paragraphStyle = NSParagraphStyle.defaultParagraphStyle().mutableCopy() as! NSMutableParagraphStyle
        paragraphStyle.alignment = NSTextAlignment.Center
        paragraphStyle.lineBreakMode = NSLineBreakMode.ByWordWrapping
        
        func processAlignment(alignment:String) {
            switch(alignment) {
            case "left":
                paragraphStyle.alignment = NSTextAlignment.Left
            case "right":
                paragraphStyle.alignment = NSTextAlignment.Right
            case "top":
                fTextTop = true
            case "bottom":
