             }
         }
         
+        /**
+         Init and insert a `menu item` at `index`.
+         
+         - parameter itemWithTitle: `item title`.
+         - parameter action: an `action` that will be executed when user highlight and release finger on an `menu item`.
+         - parameter at: specify `index` that item should be insert at
+         
+         - author: John Cido
+         */
+        final public func insert(
+            itemWithTitle title: String, action: @escaping (inout CKPanMenuItemType) -> Void, at index: Int
+            ) {
+            let item = CKPanMenuItem()
+            item.font = UIFont(name: fontName != nil ? fontName! : item.font.fontName, size: fontSize)
+            item.index = items.count
+            item.action = action
+            item.text = title
+            item.textColor = color
+            item.resume()
+            if directionFactor == 1 {
+                items.insert(item, at: index)
+                menuView.insertArrangedSubview(item, at: index)
+            } else {
+                items.insert(item, at: items.count - 1 - index)
+                menuView.insertArrangedSubview(item, at: items.count - 1 - index)
+            }
+        }
+        
+        /**
+         Append a custome defined `menu item`.
+         
+         - parameter item: an `item title` that conforms to `protocol CKPanMenuItemType`.
+         
+         - author: John Cido
+         */
         final public func append(item: CKPanMenuItemType) {
             var item = item
             item.index = items.count

            menuView.setNeedsUpdateConstraints()
        }
        
        final public func append(itemWithTitle title: String, action: @escaping (inout CKPanMenuItemType) -> Void) {
            let item = CKPanMenuItem()
            item.font = UIFont(name: fontName != nil ? fontName! : item.font.fontName, size: fontSize)

            //Detect selected menu item
            let diff = abs(end - origin)
            var aSelected = ((diff - spacing - itemLength) / (itemLength + spacing)).rounded(.down).int
            if directionFactor != 1 {
                aSelected = items.count - 1 - aSelected
            }
            //print((diff, itemLength + spacing, selected!))
            let min = spacing + fontSize + (fontSize + spacing) * aSelected.cgFloat
            let max = min + spacing
