         let bubbleYOrigin: CGFloat
         switch arrowPosition {
         case .bottom, .top, .any:
-            
-            bubbleWidth = tipViewSize.width - 2 * preferences.positioning.bubbleHInset
-            bubbleHeight = tipViewSize.height - 2 * preferences.positioning.bubbleVInset - preferences.drawing.arrowHeight
-            
-            bubbleXOrigin = preferences.positioning.bubbleHInset
-            bubbleYOrigin = arrowPosition == .bottom ? preferences.positioning.bubbleVInset : preferences.positioning.bubbleVInset + preferences.drawing.arrowHeight
+
+            bubbleWidth = tipViewSize.width - preferences.positioning.bubbleInsets.left - preferences.positioning.bubbleInsets.right
+            bubbleHeight = tipViewSize.height - preferences.positioning.bubbleInsets.top - preferences.positioning.bubbleInsets.bottom - preferences.drawing.arrowHeight
+            
+            bubbleXOrigin = preferences.positioning.bubbleInsets.left
+            bubbleYOrigin = arrowPosition == .bottom ? preferences.positioning.bubbleInsets.top : preferences.positioning.bubbleInsets.top + preferences.drawing.arrowHeight
             
         case .left, .right:
             
-            bubbleWidth = tipViewSize.width - 2 * preferences.positioning.bubbleHInset - preferences.drawing.arrowHeight
-            bubbleHeight = tipViewSize.height - 2 * preferences.positioning.bubbleVInset
-            
-            bubbleXOrigin = arrowPosition == .right ? preferences.positioning.bubbleHInset : preferences.positioning.bubbleHInset + preferences.drawing.arrowHeight
-            bubbleYOrigin = preferences.positioning.bubbleVInset
+            bubbleWidth = tipViewSize.width - preferences.positioning.bubbleInsets.left - preferences.positioning.bubbleInsets.right - preferences.drawing.arrowHeight
+            bubbleHeight = tipViewSize.height - preferences.positioning.bubbleInsets.top - preferences.positioning.bubbleInsets.left
+
+            bubbleXOrigin = arrowPosition == .right ? preferences.positioning.bubbleInsets.left : preferences.positioning.bubbleInsets.left + preferences.drawing.arrowHeight
+            bubbleYOrigin = preferences.positioning.bubbleInsets.top
             
         }
         return CGRect(x: bubbleXOrigin, y: bubbleYOrigin, width: bubbleWidth, height: bubbleHeight)

        }
        
        public struct Positioning {
            public var bubbleHInset         = CGFloat(1)
            public var bubbleVInset         = CGFloat(1)
            public var contentHInset        = CGFloat(10)
            public var contentVInset        = CGFloat(10)
            public var maxWidth             = CGFloat(200)
        }
        

        
        [unowned self] in
        
        let contentHInset = self.preferences.positioning.contentInsets.left + self.preferences.positioning.contentInsets.right
        let contentVInset = self.preferences.positioning.contentInsets.top + self.preferences.positioning.contentInsets.bottom
        let bubbleHInset = self.preferences.positioning.bubbleInsets.left + self.preferences.positioning.bubbleInsets.right
        let bubbleVInset = self.preferences.positioning.bubbleInsets.top + self.preferences.positioning.bubbleInsets.bottom

        var tipViewSize = CGSize(width: self.contentSize.width + contentHInset + bubbleHInset, height: self.contentSize.height + contentVInset + bubbleVInset + self.preferences.drawing.arrowHeight)
        
        return tipViewSize
    }()
