     public convenience init(dictionaryLiteral elements: (Key, Value)...) {
         self.init()
         for (key, value) in elements {
-            insert(key, key.startIndex, value)
+            update(key, key.startIndex, value)
         }
     }
 }

    public init() {
    }

    public func lookup(key: Key) -> Value? {
        return lookup(key, key.startIndex)
    }

    private func lookup(key: Key, _ index: Key.Index) -> Value? {

            return child?.lookup(key, index.successor())
        }
    }
    private func update(key: Key, _ index: Key.Index, _ value: Value?) -> Value? {
        if index == key.endIndex {
            return replaceValue(value)
        }

        var child = children[key[index]]
        if child == nil {
            child = Trie()
            children[key[index]] = child
        }
        return child!.update(key, index.successor(), value)
    }

    private func remove(key: Key, _ index: Key.Index) -> Value? {
        if index == key.endIndex {
            return replaceValue(nil)
        }

        let child = children[key[index]]
        return child?.remove(key, index.successor())
    }

    private func replaceValue(value: Value?) -> Value? {
        let previous = self.value
        self.value = value
        return previous
    }
}

