diff --git a/arpeggio/__init__.py b/arpeggio/__init__.py
index 4b32d8e1a2cf45ef8bb4d2c0eb538b579bd917ad..cdbcca70bc80ddc7c1272294b1882f10c4836723 100644
--- a/arpeggio/__init__.py
+++ b/arpeggio/__init__.py
@@ -292,7 +292,7 @@ class OrderedChoice(Sequence):
         c_pos = parser.position
         for e in self.nodes:
             try:
-                result = e.parse(parser)
+                result = [e.parse(parser)]
                 match = True
             except NoMatch as m:
                 parser.position = c_pos  # Backtracking
diff --git a/tests/unit/test_python_parser.py b/tests/unit/test_python_parser.py
index 25d688efd06badef8896f3ca02cc0bf2f4f1db9e..f16dd80d763f0f1a12da7bcb9c59d5f0a75f94d0 100644
--- a/tests/unit/test_python_parser.py
+++ b/tests/unit/test_python_parser.py
@@ -43,14 +43,3 @@ def test_parse_input():
     assert str(result) == "4 | + | 5 | * | 7 | / | 3.45 | * | - | 45 | * | ( | 2.56 | + | 32 | ) | / | - | 56 | * | ( | 2 | - | 1.34 | ) | "
     assert repr(result) == "[ [ [ [ number '4' [0] ] ],  '+' [1], [ [ number '5' [2] ],  '*' [3], [ number '7' [4] ],  '/' [5], [ number '3.45' [6] ],  '*' [10], [  '-' [11], number '45' [12] ],  '*' [14], [  '(' [15], [ [ [ number '2.56' [16] ] ],  '+' [20], [ [ number '32' [21] ] ] ],  ')' [23] ],  '/' [24], [  '-' [25], number '56' [26] ],  '*' [28], [  '(' [29], [ [ [ number '2' [30] ] ],  '-' [31], [ [ number '1.34' [32] ] ] ],  ')' [36] ] ] ], EOF [37] ]"
 
-def test_reduce_tree():
-
-    parser = ParserPython(calc, reduce_tree=True)
-    input = "4+5*7/3.45*-45*(2.56+32)/-56*(2-1.34)"
-    result = parser.parse(input)
-
-    assert isinstance(result, NonTerminal)
-
-    assert str(result) == "4 | + | 5 | * | 7 | / | 3.45 | * | - | 45 | * | ( | 2.56 | + | 32 | ) | / | - | 56 | * | ( | 2 | - | 1.34 | ) | "
-    assert repr(result) == "[ [ number '4' [0],  '+' [1], [ number '5' [2],  '*' [3], number '7' [4],  '/' [5], number '3.45' [6],  '*' [10], [  '-' [11], number '45' [12] ],  '*' [14], [  '(' [15], [ number '2.56' [16],  '+' [20], number '32' [21] ],  ')' [23] ],  '/' [24], [  '-' [25], number '56' [26] ],  '*' [28], [  '(' [29], [ number '2' [30],  '-' [31], number '1.34' [32] ],  ')' [36] ] ] ], EOF [37] ]"
-
diff --git a/tests/unit/test_reduce_tree.py b/tests/unit/test_reduce_tree.py
new file mode 100644
index 0000000000000000000000000000000000000000..624707fc843903d8c14b70e8ab806b6eb0260589
--- /dev/null
+++ b/tests/unit/test_reduce_tree.py
@@ -0,0 +1,51 @@
+# -*- coding: utf-8 -*-
+#######################################################################
+# Name: test_reduce_tree
+# Purpose: Test parse tree reduction
+# Author: Igor R. Dejanović <igor DOT dejanovic AT gmail DOT com>
+# Copyright: (c) 2014 Igor R. Dejanović <igor DOT dejanovic AT gmail DOT com>
+# License: MIT License
+#######################################################################
+
+import pytest
+
+# Grammar
+from arpeggio import ZeroOrMore, OneOrMore, ParserPython, Terminal, NonTerminal
+from arpeggio.export import PTDOTExporter
+from arpeggio import RegExMatch as _
+
+def grammar():      return first, "a", second, [first, second]
+def first():        return [fourth, third], ZeroOrMore(third)
+def second():       return OneOrMore(third), "b"
+def third():        return [third_str, fourth]
+def third_str():    return "3"
+def fourth():       return _(r'\d+')
+
+
+def test_reduce_tree():
+
+    input = "34 a 3 3 b 3 b"
+
+    parser = ParserPython(grammar, reduce_tree=False)
+    result = parser.parse(input)
+
+#    PTDOTExporter().exportFile(result, 'test_reduce_tree_pt.dot')
+
+    assert result[0].rule == 'first'
+    assert isinstance(result[0], NonTerminal)
+    assert result[3].rule == 'first'
+    assert result[0][0].rule == 'fourth'
+    # Check reduction for direct OrderedChoice
+    assert result[2][0].rule == 'third'
+
+    parser = ParserPython(grammar, reduce_tree=True)
+    result = parser.parse(input)
+
+    # PTDOTExporter().exportFile(result, 'test_reduce_tree_pt.dot')
+
+    assert result[0].rule == 'fourth'
+    assert isinstance(result[0], Terminal)
+    assert result[3].rule == 'fourth'
+    # Check reduction for direct OrderedChoice
+    assert result[2][0].rule == 'third_str'
+