   # TODO: Reading through the code, this does not take this into account, and
   # will problably send items that belong in the least value tree into the three
   # that follows it. I'll clean this up with unit testing.
-  find: (tier, low, extractor, sought, _) ->
+  find: (tier, _) ->
     size = tier.addresses.length
-    high = size - 1
-    while low < high
+    if tier.leaf
+      [ low, high, offset ] = [ 0, size - 1, 0 ]
+    else if size is 1
+      return 0
+    else
+      [ low, high, offset ] = [ 1, size - 1, 1 ]
+    { comparator, fields, io } = @
+    loop
       mid = (low + high) >>> 1
-      compare = @comparator sought, extractor @_record tier, mid, _
+      compare = comparator fields, io.key(tier, mid, _)
+      if compare is 0
+        break
       if compare > 0
         low = mid + 1
       else
-        high = mid
-    if low < size
-      while low != 0 && @comparator(sought, @extractor tier.record(low - 1)) == 0
-        low--
-      return low
-    return low - 1
+        high = mid - 1
+    if compare is 0
+      while mid != 0 && comparator(fields, io.key(tier, mid - 1, _)) == 0
+        mid--
+    return mid
 
   mutate: (_) ->
     address = 0

    @[@operation.method].call this, parent, child, _

  insertSorted: (parent, child, _) ->
    branch = @find child, 1, @_branchExtractor, @fields, _
    leaves = @io.lock true, child.addresses[branch], true, _

    addresses = leaves.addresses

    # Insert the object value sorted.
    for i in [0...addresses.length]
      before = leaf.record(i)
      if @comparator(mutation.fields, @extract before) <= 0
        break

    address = @io.writeInsert leaves, @object, i
    addresses.splice i, 0, address

  get: (parent, child, _) ->
    branch = @find child, 1, @_branchExtractor, @fields, _
    leaves = @io.lock true, child.addresses[branch], true, _
    address = @find leaves, 0, @extractor, @fields, _
    leaves.objects[address]

class Level
  # Construct a new level. The `exclusive` pararameter determines how this level

      comparator: comparator
      extractor: extractor
    @_options       = extend defaults, options
    @_io            = new IO options.directory, @_options.extractor

  create: (_) -> @_io.create(_)

