The session is equipped with an empty method called 'expand_dynamic'. This method is called (even as an empty one) in the appropriate places, to enable later implementations of a dynamic expansion of the form_obj list. Thus, a user can select adding more instances of a certain form_obj class according to the need. An inheriting class that needs a dynamic expansion of forms must encapsulate the expansion method in the 'expand_dynamic' method, so it can allways be called when needed. When the last form in the 'session' object list is reported back to be valid, the session invokes a special form for final validation of the information. This is done by calling the 'present_contents' method of each form. The resulting form has a checkbox associated with each 'form_obj' instance. This form produces a corrections list. When the form is submitted, it is identified with a special 'level'. If it provides a non-empty corrections list, the session itterates again through the selected forms by setting them as non-valid thus forcing them to present themselves for corrections. When the corrections list is empty the session 'produce_output' method is called to produce the output of the submitted information. Following production of output, the user is allowed to select forms that contain data to be used again in a consecutive submission cycle. This is done by the session class, which has a 'repeat_forms' list of allowed levels to be repeated. After the user has selected the required form levels, the session dumps a virtual memory file which contains the appropriate key=value combinations for preservation of information. Now, on invokation of each 'form_obj' instance, the session will compose a data dictionary which is handed to the form's 'init' method. When such a dictionary is present, the form will invoke the 'item' instances with the appropriate values as default.