diff --git a/seminar/views/views_all.py b/seminar/views/views_all.py
index 48708b26..32956c35 100644
--- a/seminar/views/views_all.py
+++ b/seminar/views/views_all.py
@@ -103,8 +103,30 @@ class TNLData(object):
 			outitem = cls.from_treenode(ch,out,idx)
 			out.children.append(outitem)
 		return out
+	
+	@classmethod
+	def filter_treenode(cls, treenode, predicate):
+		tnll = cls._filter_treenode_recursive(treenode, predicate) # TreeNodeList List :-)
+		# Teď vyrobíme virtuální TNL, který nemá obsah, ale má za potomky všecny nalezené TNLData
+		result = cls(None)
+		for idx, tnl in enumerate(tnll):
+			result.children.append(tnl)
+			tnl.parent = result
+			tnl.index = idx
+		return result
 
-
+	@classmethod
+	def _filter_treenode_recursive(cls, treenode, predicate):
+		if predicate(treenode):
+			return [cls.from_treenode(treenode)]
+		else:
+			found = []
+			for tn in all_children(treenode):
+				result = cls.filter_treenode(tn, predicate)
+				# Result by v tuhle chvíli měl být seznam TNLDat odpovídající treenodům, jež matchnuly predikát.
+				for tnl in result:
+					found.append(tnl)
+			return found
 
 class TreeNodeView(generic.DetailView):
 	model = s.TreeNode