     
   }
 
-  internal func search(key: Key) -> Payload? {
-    guard let node = self.findNode(key: key) else {
+  func search(key: Key) -> Payload? {
+    guard let node = findNode(key: key) else {
       return nil
     }
 
     return node.next!.data    
   }    
- 
-}
-
-
-
-// MARK: - Inserting
-
-extension SkipList {
-  private func bootstrapBaseLayer(key: Key, data: Payload) -> Void {    
-    self.head          = Node(asHead: true)    
-    var node           = Node(key: key, data: data)
-
-    self.head!.next    = node
+  
+}
+
+
+
+// MARK: - Insert a node into lanes depending on skip list status ( bootstrap base-layer if head is empty / start insertion from current head ).
+
+extension SkipList {
+  private func bootstrapBaseLayer(key: Key, data: Payload) {    
+    head       = Node(asHead: true)    
+    var node   = Node(key: key, data: data)
+
+    head!.next = node
     
     var currentTopNode = node
 

        switch node.next {
        case .none:
          
          currentNode = node.down
        case .some(let value) where value.key != nil:

          if value.key == key {


// Stack from : https://github.com/raywenderlich/swift-algorithm-club/tree/master/Stack
public struct Stack<T> {
  fileprivate var array: [T] = []

  public var isEmpty: Bool {
    return array.isEmpty
