diff --git a/06-vyrazy/objektove.py b/06-vyrazy/objektove.py
index 8418157883e1e960f8d750e3d4803bde42fa625d..90b0d458a9cc3f7719d76956bd76baa96b88048b 100755
--- a/06-vyrazy/objektove.py
+++ b/06-vyrazy/objektove.py
@@ -1,4 +1,12 @@
 #!/usr/bin/python3
+#
+#  V elementárním řešení bylo nešikovné, že implementace operátorů byla
+#  roztroušená po celém programu, takže přidat nový operátor vyžadovalo
+#  projít celý program.
+#
+#  Zde ukazujeme, jak oddělit implementaci operátorů do samostatných tříd
+#  (odvozených od nějaké společné třídy Node).
+#
 
 class Node:
 
diff --git a/06-vyrazy/objektove2.py b/06-vyrazy/objektove2.py
index e8622377b00c655e86e7044abd1d525ec0278fc9..1a4de578bb76ce0a24fc7f05442466907f37b12d 100755
--- a/06-vyrazy/objektove2.py
+++ b/06-vyrazy/objektove2.py
@@ -1,4 +1,14 @@
 #!/usr/bin/python3
+#
+#  Naše objektové řešení obsahovalo spoustu duplicitního kódu: speciálně
+#  všechny binární operátory měly identické metody __init__ a velmi podobné
+#  metody __str__ a eval.
+#
+#  Zde se duplicit zbavíme tím, že je přesuneme do společného předka:
+#  třídy BinaryNode, která popisuje chování obecného binárního operátoru.
+#  Každý konkrétní operátor si pak pouze dodefinuje, jak se jmenuje a jaké
+#  funkci odpovídá.
+#
 
 class Node:
 
@@ -27,37 +37,40 @@ class BinaryNode(Node):
     def __str__(self):
         return '(' + str(self.left) + self.op_name + str(self.right) + ')'
 
+    def eval(self):
+        return self.eval_op(self.left.eval(), self.right.eval())
+
 
 class AddNode(BinaryNode):
 
     op_name = '+'
 
-    def eval(self):
-        return self.left.eval() + self.right.eval()
+    def eval_op(self, x, y):
+        return x + y
 
 
 class SubNode(BinaryNode):
 
     op_name = '-'
 
-    def eval(self):
-        return self.left.eval() - self.right.eval()
+    def eval_op(self, x, y):
+        return x - y
 
 
 class MulNode(BinaryNode):
 
     op_name = '*'
 
-    def eval(self):
-        return self.left.eval() * self.right.eval()
+    def eval_op(self, x, y):
+        return x * y
 
 
 class DivNode(BinaryNode):
 
     op_name = '/'
 
-    def eval(self):
-        return self.left.eval() // self.right.eval()
+    def eval_op(self, x, y):
+        return x // y
 
 
 x = AddNode(MulNode(NumNode(3), NumNode(4)), SubNode(NumNode(5), NumNode(6)))
diff --git a/06-vyrazy/strom-vyrazu.py b/06-vyrazy/strom-vyrazu.py
index d51cf03891a7e2c0faf4ee5277d72863370fa265..e2cab566445d8e789c7a2b57d606781706daf49d 100755
--- a/06-vyrazy/strom-vyrazu.py
+++ b/06-vyrazy/strom-vyrazu.py
@@ -39,14 +39,6 @@ class Node:
 
 
 x = Node('+', Node('*', Node(3), Node(4)), Node('-', Node(5), Node(6)))
-print(x)
-# x.print_tree()
-# print(x.eval())
-
-# Další úkoly:
-#   - doplnit unární operátory (třeba 'N' pro negaci)
-#   - počítání hloubky stromu
-#   - výpis stromu v postfixovém tvaru
-#   - převod postfixového tvaru na strom
-#   - výpis stromu v infixovém tvaru bez zbytečných závorek
-#   - prevod infixového tvaru na strom (*)
+# print(x)
+x.print_tree()
+print(x.eval())