         if @_.removed
           throw( "Heron.Thingy: Trying to do something with removed thingy #{@id()}" )
 
+    @after_construction = ( f ) -> after_construction_functions.push( f )
     @_.delegate = @_.type_data.initializer.call( this, attrs, local_data )
+    delete @after_construction
 
     thingyverse._.per_thingy[ id ] =
       thingy:   this
       delegate: @_.delegate
+
+    for f in after_construction_functions
+      f.call( this )
 
   # ID.
   # @return [String] ID.

#
# Every initializer should be a function which takes two arguments -- `attrs`
# and `local_data` -- and returns a delegate.  The `this` of the initializer
# will be set to the thingy object.
#
# As convenience and for future compatibility, {Heron.Thingyverse} defines
# {#batch}, {#begin}, and {#finish}, to provide batch semantics.  At present,

    if thingyverse._.per_thingy[ id ]?
      throw( "Heron.Thingy: Thingy #{id} already exists." )

    after_construction_functions = []

    @_ =
      thingyverse: thingyverse
      typename:    typename
