       l_ind := l_schema_suites.next(l_ind);
     end loop;
     $end
-  
+
   end config_schema;
 
   function get_schema_suites(a_schema_name in varchar2) return tt_schema_suites is
   begin
     -- Currently cache invalidation on DDL is not implemented so schema is rescaned each time
-    if not g_schema_suites.exists(a_schema_name) 
-      or g_schema_suites(a_schema_name).changed_at<nvl(get_schema_max_ddl(a_schema_name), date'2999-12-31') then
+    if not g_schema_suites.exists(a_schema_name)
+      or g_schema_suites(a_schema_name).changed_at < get_schema_max_ddl(a_schema_name) then
       ut_utils.debug_log('Rescanning schema ' || a_schema_name);
       config_schema(a_schema_name);
     end if;
-  
+
     return g_schema_suites(a_schema_name).schema_suites;
   end get_schema_suites;
 

      l_paths := set(l_paths);
      return l_paths;
    end clean_paths;
    
    procedure skip_by_path(a_suite in out nocopy ut_test_object, a_path varchar2) is
      l_root      constant varchar2(32767) := regexp_substr(a_path, '\w+');
      l_rest_path constant varchar2(32767) := regexp_substr(a_path, '\.(.+)', subexpression => 1);
      l_item  ut_test_object;
      l_items ut_objects_list := ut_objects_list();
      l_object_name varchar2(32767);
      
    begin
      a_suite.set_ignore_flag(false);
    
      if a_path is not null then
      
        for i in 1 .. a_suite.items.count loop
        
          l_item := treat(a_suite.items(i) as ut_test_object);
        
          l_object_name := l_item.object_name;
          --l_object_name := regexp_substr(l_object_name,'\w+$'); -- temporary fix. seems like suite have suitepath in object_name
          if regexp_like(l_object_name, l_root, modifier => 'i') then
            
            skip_by_path(l_item, l_rest_path);          
            l_items.extend;
            l_items(l_items.count) := l_item;

          end if;
          
        end loop;
        
        a_suite.items := l_items;
      
        if l_items.count = 0 then--not l_found then
          raise_application_error(-20203, 'Suite note found');
        end if;

                   and t.object_type in ('PACKAGE')) loop
      -- parse the source of the package
      l_suite := config_package(rec.owner, rec.object_name);

      if l_suite is not null then
        l_all_suites(l_suite.object_path) := l_suite;
      end if;

    end loop;

    l_schema_suites.delete;

    -- Restructure single-dimenstion list into hierarchy of suites by the value of %suitepackage attribute value
    -- All root suite compose the root-suite list of the schema
    l_ind := l_all_suites.first;
    while l_ind is not null loop

      l_root := regexp_substr(l_ind, '^[^.]+');

      if l_schema_suites.exists(l_root) then
        l_root_suite := l_schema_suites(l_root);
        l_path       := trim_path(l_ind, l_root || '.');
