diff --git a/construct/core.py b/construct/core.py
index 85406a7..9b3bbc4 100644
--- a/construct/core.py
+++ b/construct/core.py
@@ -1126,17 +1126,12 @@ class RepeatUntil(Subconstruct):
         super(RepeatUntil, self).__init__(subcon)
         self.predicate = predicate
     def _parse(self, stream, context, path):
-        try:
-            obj = []
-            while True:
-                subobj = self.subcon._parse(stream, context, path)
-                obj.append(subobj)
-                if self.predicate(subobj, obj, context):
-                    return ListContainer(obj)
-        except ExplicitError:
-            raise
-        except ConstructError:
-            raise RangeError("missing terminator when parsing")
+        obj = []
+        while True:
+            subobj = self.subcon._parse(stream, context, path)
+            obj.append(subobj)
+            if self.predicate(subobj, obj, context):
+                return ListContainer(obj)
     def _build(self, obj, stream, context, path):
         for i, subobj in enumerate(obj):
             self.subcon._build(subobj, stream, context, path)

diff --git a/tests/test_all.py b/tests/test_all.py
index 7681026..d9ef53e 100644
--- a/tests/test_all.py
+++ b/tests/test_all.py
@@ -252,7 +252,7 @@ class TestCore(unittest.TestCase):
     def test_repeatuntil(self):
         assert RepeatUntil(obj_ == 9, Byte).parse(b"\x02\x03\x09garbage") == [2,3,9]
         assert RepeatUntil(obj_ == 9, Byte).build([2,3,9,1,1,1]) == b"\x02\x03\x09"
-        assert raises(RepeatUntil(obj_ == 9, Byte).parse, b"\x02\x03\x08") == RangeError
+        assert raises(RepeatUntil(obj_ == 9, Byte).parse, b"\x02\x03\x08") == FieldError
         assert raises(RepeatUntil(obj_ == 9, Byte).build, [2,3,8]) == RangeError
         assert raises(RepeatUntil(obj_ == 9, Byte).sizeof) == SizeofError
         assert RepeatUntil(lambda x,lst,ctx: lst[-2:]==[0,0], Byte).parse(b"\x01\x00\x00\xff") == [1,0,0]

RepeatUntil catches too broad of Exception, gives misleading message
The following code:

```python
from construct import RepeatUntil, Const, Struct, Int32ul

data = b"\x01\x00\x00\x00" * 10

TEN_ONES = Struct(
    RepeatUntil(lambda obj, lst, ctx: len(lst) == 10, Const(Int32ul, 1))
)

TEN_TWOS = Struct(
    RepeatUntil(lambda obj, lst, ctx: len(lst) == 10, Const(Int32ul, 2))
)

TEN_ONES.parse(data)  # Works
TEN_TWOS.parse(data)  # Opaque/Misleading Exception
```

Gives the error message:
```
$> env/bin/python test_construct.py                                                   
Traceback (most recent call last):
  File "test_construct.py", line 16, in <module>
    TEN_TWOS.parse(data)
  File "env/lib/python2.7/site-packages/construct/core.py", line 161, in parse
    return self.parse_stream(BytesIO(data), context, **kw)
  File "env/lib/python2.7/site-packages/construct/core.py", line 174, in parse_stream
    return self._parse(stream, context2, "(parsing)")
  File "env/lib/python2.7/site-packages/construct/core.py", line 844, in _parse
    subobj = sc._parse(stream, context, path)
  File "env/lib/python2.7/site-packages/construct/core.py", line 1140, in _parse
    raise RangeError("missing terminator when parsing")
construct.core.RangeError: missing terminator when parsing
```

But this not what I expected. For instance, with the following code:
```python
from construct import Const, Struct, Int32ul

data = b"\x01\x00\x00\x00"

ONE = Struct(
    Const(Int32ul, 1)
)

TWO = Struct(
    Const(Int32ul, 2)
)

ONE.parse(data)  # Works
TWO.parse(data)  # Expected Exception given
```

Gives the error message:
```
$> env/bin/python test_construct2.py
Traceback (most recent call last):
  File "test_construct2.py", line 15, in <module>
    TWO.parse(data)  # Expected Exception given
  File "env/lib/python2.7/site-packages/construct/core.py", line 161, in parse
    return self.parse_stream(BytesIO(data), context, **kw)
  File "env/lib/python2.7/site-packages/construct/core.py", line 174, in parse_stream
    return self._parse(stream, context2, "(parsing)")
  File "env/lib/python2.7/site-packages/construct/core.py", line 844, in _parse
    subobj = sc._parse(stream, context, path)
  File "env/lib/python2.7/site-packages/construct/core.py", line 1883, in _parse
    raise ConstError("expected %r but parsed %r" % (self.value, obj))
construct.core.ConstError: expected 2 but parsed 1
```

Which is the error message I would have expected from the first example.

In fact, changing [this line](https://github.com/construct/construct/blob/670eb6c1b6e9f6c9e6ea7102d08d115612818134/construct/core.py#L1139) to `raise` gives the expected Exception.

The `RepeatUntil` implementation is catching too broad of Exceptions, and returning misleading error messages as a result.
tests/test_all.py::TestCore::test_repeatuntil
tests/test_all.py::TestCore::test_aligned tests/test_all.py::TestCore::test_alignedstruct tests/test_all.py::TestCore::test_array tests/test_all.py::TestCore::test_bitsinteger tests/test_all.py::TestCore::test_bitsswapped tests/test_all.py::TestCore::test_bitsswapped_from_issue_145 tests/test_all.py::TestCore::test_bitstruct tests/test_all.py::TestCore::test_bitstruct_from_issue_39 tests/test_all.py::TestCore::test_bitwise tests/test_all.py::TestCore::test_bytes tests/test_all.py::TestCore::test_bytesinteger tests/test_all.py::TestCore::test_byteswapped tests/test_all.py::TestCore::test_byteswapped_from_issue_70 tests/test_all.py::TestCore::test_bytewise tests/test_all.py::TestCore::test_check tests/test_all.py::TestCore::test_checksum tests/test_all.py::TestCore::test_compressed_bzip2 tests/test_all.py::TestCore::test_compressed_gzip tests/test_all.py::TestCore::test_compressed_lzma tests/test_all.py::TestCore::test_compressed_prefixed tests/test_all.py::TestCore::test_compressed_zlib tests/test_all.py::TestCore::test_computed tests/test_all.py::TestCore::test_const tests/test_all.py::TestCore::test_context tests/test_all.py::TestCore::test_cstring tests/test_all.py::TestCore::test_default tests/test_all.py::TestCore::test_embeddedbitstruct tests/test_all.py::TestCore::test_embeddedif_issue_296 tests/test_all.py::TestCore::test_embeddedswitch_issue_312 tests/test_all.py::TestCore::test_enum tests/test_all.py::TestCore::test_error tests/test_all.py::TestCore::test_expradapter tests/test_all.py::TestCore::test_exprsymmetricadapter tests/test_all.py::TestCore::test_exprvalidator tests/test_all.py::TestCore::test_filter tests/test_all.py::TestCore::test_flag tests/test_all.py::TestCore::test_flagsenum tests/test_all.py::TestCore::test_floats tests/test_all.py::TestCore::test_floats_randomized tests/test_all.py::TestCore::test_focusedseq tests/test_all.py::TestCore::test_formatfield tests/test_all.py::TestCore::test_formatfield_floats_randomized tests/test_all.py::TestCore::test_formatfield_ints_randomized tests/test_all.py::TestCore::test_from_issue_171 tests/test_all.py::TestCore::test_from_issue_175 tests/test_all.py::TestCore::test_from_issue_231 tests/test_all.py::TestCore::test_from_issue_244 tests/test_all.py::TestCore::test_from_issue_246 tests/test_all.py::TestCore::test_from_issue_269 tests/test_all.py::TestCore::test_from_issue_28 tests/test_all.py::TestCore::test_from_issue_298 tests/test_all.py::TestCore::test_from_issue_324 tests/test_all.py::TestCore::test_from_issue_357 tests/test_all.py::TestCore::test_from_issue_362 tests/test_all.py::TestCore::test_from_issue_60 tests/test_all.py::TestCore::test_from_issue_71 tests/test_all.py::TestCore::test_from_issue_76 tests/test_all.py::TestCore::test_from_issue_87 tests/test_all.py::TestCore::test_globally_encoded_strings tests/test_all.py::TestCore::test_greedybytes tests/test_all.py::TestCore::test_greedyrange tests/test_all.py::TestCore::test_greedystring tests/test_all.py::TestCore::test_hanging_issue_280 tests/test_all.py::TestCore::test_hex tests/test_all.py::TestCore::test_hex_regression_188 tests/test_all.py::TestCore::test_hexdump tests/test_all.py::TestCore::test_hexdump_regression_188 tests/test_all.py::TestCore::test_if tests/test_all.py::TestCore::test_ifthenelse tests/test_all.py::TestCore::test_indexing tests/test_all.py::TestCore::test_ints tests/test_all.py::TestCore::test_ints24 tests/test_all.py::TestCore::test_ipaddress_from_issue_95 tests/test_all.py::TestCore::test_lazybound tests/test_all.py::TestCore::test_lazybound_node tests/test_all.py::TestCore::test_lazyrange tests/test_all.py::TestCore::test_lazysequence tests/test_all.py::TestCore::test_lazysequence_kwctor tests/test_all.py::TestCore::test_lazysequence_nested_embedded tests/test_all.py::TestCore::test_lazystruct tests/test_all.py::TestCore::test_lazystruct_kwctor tests/test_all.py::TestCore::test_lazystruct_nested_embedded tests/test_all.py::TestCore::test_namedtuple tests/test_all.py::TestCore::test_nonbytes_checksum_issue_323 tests/test_all.py::TestCore::test_noneof tests/test_all.py::TestCore::test_ondemand tests/test_all.py::TestCore::test_ondemandpointer tests/test_all.py::TestCore::test_oneof tests/test_all.py::TestCore::test_operators tests/test_all.py::TestCore::test_optional tests/test_all.py::TestCore::test_padded tests/test_all.py::TestCore::test_padding tests/test_all.py::TestCore::test_pascalstring tests/test_all.py::TestCore::test_pass tests/test_all.py::TestCore::test_peek tests/test_all.py::TestCore::test_pointer tests/test_all.py::TestCore::test_prefixed tests/test_all.py::TestCore::test_prefixedarray tests/test_all.py::TestCore::test_probe tests/test_all.py::TestCore::test_probeinto tests/test_all.py::TestCore::test_range tests/test_all.py::TestCore::test_rawcopy tests/test_all.py::TestCore::test_rawcopy_issue_289 tests/test_all.py::TestCore::test_rawcopy_issue_358 tests/test_all.py::TestCore::test_rebuffered tests/test_all.py::TestCore::test_rebuild tests/test_all.py::TestCore::test_renamed tests/test_all.py::TestCore::test_restreamed tests/test_all.py::TestCore::test_restreamed_partial_read tests/test_all.py::TestCore::test_seek tests/test_all.py::TestCore::test_select tests/test_all.py::TestCore::test_select_kwctor tests/test_all.py::TestCore::test_sequence tests/test_all.py::TestCore::test_sequence_nested_embedded tests/test_all.py::TestCore::test_slicing tests/test_all.py::TestCore::test_stopif tests/test_all.py::TestCore::test_string tests/test_all.py::TestCore::test_struct tests/test_all.py::TestCore::test_struct_kwctor tests/test_all.py::TestCore::test_struct_nested_embedded tests/test_all.py::TestCore::test_struct_proper_context tests/test_all.py::TestCore::test_struct_sizeof_context_nesting tests/test_all.py::TestCore::test_switch tests/test_all.py::TestCore::test_switch_issue_357 tests/test_all.py::TestCore::test_tell tests/test_all.py::TestCore::test_terminated tests/test_all.py::TestCore::test_union tests/test_all.py::TestCore::test_union_issue_348 tests/test_all.py::TestCore::test_union_kwctor tests/test_all.py::TestCore::test_varint tests/test_all.py::TestCore::test_varint_randomized