             }
             
             let point = CGPointMake(self.bounds.origin.x + lineWidth / 2, y + (titleHeight + gap) / 2)
-            let rect = CGRectMake(
+            
+            let maxTitleWidth = self.bounds.width - pointDiameter - gap * 1.5
+            var titleWidth = titleLabel.intrinsicContentSize().width + 20
+            if (titleWidth > maxTitleWidth) {
+                titleWidth = maxTitleWidth
+            }
+            let bubbleRect = CGRectMake(
                 point.x + pointDiameter + lineWidth / 2 + 13,
                 y + pointDiameter / 2,
-                self.bounds.width - pointDiameter - gap * 1.5,
+                titleWidth,
                 titleHeight + gap)
-            sections.append((point, rect, titleLabel, descriptionLabel))
+            
+            var descriptionRect:CGRect?
+            if descriptionLabel != nil {
+                descriptionRect = CGRectMake(
+                    bubbleRect.origin.x,
+                    bubbleRect.origin.y + bubbleRect.height + 3,
+                    self.bounds.width - pointDiameter - gap * 1.5,
+                    descriptionLabel!.intrinsicContentSize().height)
+            }
+            
+            sections.append((point, bubbleRect, descriptionRect, titleLabel, descriptionLabel))
             
             y += height
             y += gap * 2.2 // section gap

    override func touchesEnded(touches: Set<UITouch>, withEvent event: UIEvent?) {
        let point = touches.first!.locationInView(self)
        for (index, section) in sections.enumerate() {
            if (section.rect.contains(point)) {
                points[index].touchUpInside?(point: points[index])
                break
            }

                
                drawLine(start, end: end, color: lineColor)
            }
            drawPoint(sections[i].point, color: .clearColor())
            drawBubble(sections[i].bubbleRect, backgroundColor: bubbleColor, textColor:titleColor, titleLabel: sections[i].titleLabel)
            
            let descriptionLabel = sections[i].descriptionLabel
            if (descriptionLabel != nil) {
                drawDescription(sections[i].descriptionRect!, textColor: descriptionColor, descriptionLabel: sections[i].descriptionLabel!)
            }
        }
        
