         }
         if(indexNode?.value! == value){
             let parent: Node<T>? = indexNode?.parent!
-            indexNode?.left?.parent = parent    //setting left & right children's parent to removal node's parent :(
+            indexNode?.left?.parent = parent    
             indexNode?.right?.parent = parent
-            let ix: Int = table.index(where: {$0 as! T == value})!   //This means that duplicate values should not be allowed!!
+            let ix: Int = table.index(where: {$0 as! T == value})!
             table.remove(at: ix)
             return indexNode
         }

    
    // MARK: - Public API
    
    public func get(_ value: T) -> Node<T>?{
        return search(indexNode: root, value: value)
    }
    
    public func put(_ value: T) throws -> Void{
        if root == nil || root?.value == nil {throw NodeError.RootNilException}
        if table.contains(value) {throw NodeError.PreExistingValue}

        insert(node: node, presentNode: root)
    }
    
    /**
     Removes node with specified value from the current BinarySearchTree.
     
     - Parameter value: The value of the node to be removed.
     - Returns: optional node
     - Throws: InvalidNodeException if node with specified value is undeclared within BinarySearchTree.
     */
    public func remove(_ value: T) throws -> Node<T>?{
        guard let node: Node<T> = delete(indexNode: root, value: value) else {
            throw NodeError.InvalidNodeException
