       @sites__         = args[1] || new HashSet()
       @children__      = args[2] || new HashMap()
 
-      @triangles__  = seq.select @triangulation__, (t) ->
-        seq.forall t, (p) -> not p.isInfinite()
-
     # The method `toSeq` returns the proper (non-virtual) triangles contained
     # in this triangulation as a lazy sequence. It does so by removing any
     # triangles from the underlying triangulation object which contain a
     # virtual vertex.
-    toSeq: -> @triangles__
+    memo @, 'toSeq', -> seq.select @triangulation__, (t) ->
+      seq.forall t, (p) -> not p.isInfinite()
 
     # The method `third` finds the unique third vertex forming a triangle with
     # the two given ones in the given orientation, if any.

  plus:  (p)  -> new Point2d @x + p.x, @y + p.y
  minus: (p)  -> new Point2d @x - p.x, @y - p.y
  times: (f)  -> new Point2d @x * f, @y * f
  toString:   -> "(#{@x}, #{@y})"
  equals: (p) -> @constructor == p.constructor and @x == p.x and @y == p.y


# ----


    # The method `toSeq` returns the triangles contained in the triangulation
    # as a lazy sequence.
    memo @, 'toSeq', -> @triangles__.toSeq()

    # The method `third` finds the unique third vertex forming a triangle with
    # the two given ones in the given orientation, if any.
