diff --git a/tutorial/Sgml.pmod b/tutorial/Sgml.pmod
index 69c17d14f4bbf5968e39895954f9891868cde421..d314ef4415a905b2ae36021997b54fd7e42f1128 100644
--- a/tutorial/Sgml.pmod
+++ b/tutorial/Sgml.pmod
@@ -42,6 +42,29 @@ class Tag
     return "pos "+pos+" in file "+file; 
   }
 
+
+  static mapping(string:array(string|object(Tag))) data_cache=([]);
+  static array(string|object(Tag)) last_data;
+
+  array(string|object(Tag)) find(string tag)
+    {
+      if(last_data != data)
+      {
+	data_cache=([]);
+	foreach(data, Tag t)
+	  {
+	    if(data_cache[t->tag])
+	    {
+	      data_cache[t->tag]+=({t});
+	    }else{
+	      data_cache[t->tag]=({t});
+	    }
+	  }
+	last_data=data;
+      }
+      return data_cache[tag];
+    }
+
   void create(string t,
 	      void|mapping p,
 	      void|int po, 
@@ -57,6 +80,10 @@ class Tag
   }
 };
 
+class PropTag
+{
+};
+
 #define TAG object(Tag)|string
 #define SGML array(TAG)