     }
 
     // MARK: Bubble insertion/removal
-    private func addBubble(bubble: BubbleView) {
+    private func addBubble(bubble: BubbleView, origin: CGPoint) {
         assert(bubble.index != -1)
         let tapRecognizer = UITapGestureRecognizer(target: self, action: #selector(didTapBubble))
         bubble.addGestureRecognizer(tapRecognizer)
         tapRecognizers[bubble] = tapRecognizer
-        bubble.frame = CGRect(origin: center, size: CGSize(width: 100, height: 100))
+        bubble.frame = CGRect(origin: origin, size: CGSize(width: 100, height: 100))
+        bubble.transform = CGAffineTransformMakeScale(0.1, 0.1)
         addSubview(bubble)
         indexToBubble[bubble.index!] = bubble
         addBehaviors(bubble)
+
+        animateToNormalSize(bubble)
     }
 
     private func removeBubble(bubble: BubbleView) {


     - parameter bubble: <#bubble description#>
     */
    public func focus(bubbleIndex: Int) {
        // If the correct bubble is already focused, we're done.
        if focusedBubble?.index == bubbleIndex {
            return
        }
        let newRelated = dataSource!.relatedForBubble(bubbleIndex)
        assert(!newRelated.contains(bubbleIndex))
        // Add ones that aren't in the current related
        let toAdd: Set<Int> = {
            var temp = newRelated.subtract(currentRelated)

import Foundation
import CoreMotion

public protocol BubblesViewDataSource {
    func focusedBubble() -> Int
