diff --git a/README.md b/README.md
index d991125..74490c2 100644
--- a/README.md
+++ b/README.md
@@ -522,7 +522,7 @@ backtracking is attempted:
 ...   raise AssertionError('MultipleInvalid not raised')
 ... except MultipleInvalid as e:
 ...   exc = e
->>> str(exc) == "invalid list value @ data[0][0]"
+>>> str(exc) == "not a valid value @ data[0][0]"
 True
 
 ```
diff --git a/voluptuous.py b/voluptuous.py
index 3ab4de4..4b1215e 100644
--- a/voluptuous.py
+++ b/voluptuous.py
@@ -227,10 +227,6 @@ class InclusiveInvalid(Invalid):
     """Not all values found in inclusion group."""
 
 
-class SequenceItemInvalid(Invalid):
-    """One of the values found in a sequence was invalid."""
-
-
 class SequenceTypeInvalid(Invalid):
     """The type found is not a sequence type."""
 
@@ -664,7 +660,7 @@ class Schema(object):
         >>> validator = Schema(['one', 'two', int])
         >>> validator(['one'])
         ['one']
-        >>> with raises(MultipleInvalid, 'invalid list value @ data[0]'):
+        >>> with raises(MultipleInvalid, 'expected int @ data[0]'):
         ...   validator([3.5])
         >>> validator([1])
         [1]
@@ -698,8 +694,6 @@ class Schema(object):
                             raise
                         invalid = e
                 else:
-                    if len(invalid.path) <= len(index_path):
-                        invalid = SequenceItemInvalid('invalid %s value' % seq_type_name, index_path)
                     errors.append(invalid)
             if errors:
                 raise MultipleInvalid(errors)
@@ -714,7 +708,7 @@ class Schema(object):
         >>> validator = Schema(('one', 'two', int))
         >>> validator(('one',))
         ('one',)
-        >>> with raises(MultipleInvalid, 'invalid tuple value @ data[0]'):
+        >>> with raises(MultipleInvalid, 'expected int @ data[0]'):
         ...   validator((3.5,))
         >>> validator((1,))
         (1,)
@@ -729,7 +723,7 @@ class Schema(object):
         >>> validator = Schema(['one', 'two', int])
         >>> validator(['one'])
         ['one']
-        >>> with raises(MultipleInvalid, 'invalid list value @ data[0]'):
+        >>> with raises(MultipleInvalid, 'expected int @ data[0]'):
         ...   validator([3.5])
         >>> validator([1])
         [1]
@@ -1095,7 +1089,7 @@ class Msg(object):
     Messages are only applied to invalid direct descendants of the schema:
 
     >>> validate = Schema(Msg([['one', 'two', int]], 'not okay!'))
-    >>> with raises(MultipleInvalid, 'invalid list value @ data[0][0]'):
+    >>> with raises(MultipleInvalid, 'expected int @ data[0][0]'):
     ...   validate([['three']])
 
     The type which is thrown can be overridden but needs to be a subclass of Invalid

list validation swallows more useful/explicit error messages
Take this validator and schema:

```python
def is_even(value):
    if value % 2:
        raise Invalid('%i is not even' % value)
    return value

schema = Schema(dict(even_number=All(int, is_even)))
schema(dict(even_number=3))
```

We get a useful error message:

```
voluptuous.MultipleInvalid: 3 is not even for dictionary value @ data['even_number']
```

Sadly, as soon as we want a list of these, we lose the useful error message:

```python
schema = Schema(dict(even_numbers=[All(int, is_even)]))
schema(dict(even_numbers=[3]))
````

Instead, we get a much less useful message:

```
voluptuous.MultipleInvalid: invalid list value @ data['even_numbers'][0]
```

Sadly, nowhere in that `MultipleInvalid` exception is the original error stored.
diff --git a/tests.md b/tests.md
index f098c1b..18f6fba 100644
--- a/tests.md
+++ b/tests.md
@@ -16,7 +16,7 @@ value:
     ...   raise AssertionError('MultipleInvalid not raised')
     ... except MultipleInvalid as e:
     ...   exc = e
-    >>> str(exc) == 'invalid list value @ data[1]'
+    >>> str(exc) == 'expected a dictionary @ data[1]'
     True
 
 It should also be accurate for nested values:
@@ -35,7 +35,7 @@ It should also be accurate for nested values:
     ... except MultipleInvalid as e:
     ...   exc = e
     >>> str(exc)
-    "invalid list value @ data[0]['four'][0]"
+    "not a valid value @ data[0]['four'][0]"
 
     >>> try:
     ...   schema([{'six': {'seven': 'nine'}}])
@@ -116,9 +116,9 @@ Multiple errors are reported:
     ...   schema([1, 2, 3])
     ... except MultipleInvalid as e:
     ...   print([str(i) for i in e.errors])  # doctest: +NORMALIZE_WHITESPACE
-    ['invalid list value @ data[0]',
-     'invalid list value @ data[1]',
-     'invalid list value @ data[2]']
+    ['expected a list @ data[0]',
+     'expected a list @ data[1]',
+     'expected a list @ data[2]']
 
 Required fields in dictionary which are invalid should not have required :
 
diff --git a/tests.py b/tests.py
index 0dd4e9d..32e6694 100644
--- a/tests.py
+++ b/tests.py
@@ -112,7 +112,7 @@ def test_literal():
     try:
         schema([{"c": 1}])
     except Invalid as e:
-        assert_equal(str(e), 'invalid list value @ data[0]')
+        assert_equal(str(e), "{'c': 1} not match for {'b': 1} @ data[0]")
     else:
         assert False, "Did not raise Invalid"
 
@@ -242,3 +242,23 @@ def test_repr():
     )
     assert_equal(repr(coerce_), "Coerce(int, msg='moo')")
     assert_equal(repr(all_), "All('10', Coerce(int, msg=None), msg='all msg')")
+
+
+def test_list_validation_messages():
+    """ Make sure useful error messages are available """
+
+    def is_even(value):
+        if value % 2:
+            raise Invalid('%i is not even' % value)
+        return value
+
+    schema = Schema(dict(even_numbers=[All(int, is_even)]))
+
+    try:
+        schema(dict(even_numbers=[3]))
+    except Invalid as e:
+        assert_equal(len(e.errors), 1, e.errors)
+        assert_equal(str(e.errors[0]), "3 is not even @ data['even_numbers'][0]")
+        assert_equal(str(e), "3 is not even @ data['even_numbers'][0]")
+    else:
+        assert False, "Did not raise Invalid"

pip install -e .
parse_log_pytest
pytest
nose coverage pytest
3.5
pytest --no-header -rA --tb=line --color=no -p no:cacheprovider -W ignore::DeprecationWarning
attrs @ file:///opt/conda/conda-bld/attrs_1642510447205/work
certifi==2021.5.30
coverage==6.2
importlib-metadata @ file:///tmp/build/80754af9/importlib-metadata_1631916693255/work
iniconfig @ file:///home/linux1/recipes/ci/iniconfig_1610983019677/work
more-itertools @ file:///tmp/build/80754af9/more-itertools_1637733554872/work
nose==1.3.7
packaging @ file:///tmp/build/80754af9/packaging_1637314298585/work
pluggy @ file:///tmp/build/80754af9/pluggy_1615976315926/work
py @ file:///opt/conda/conda-bld/py_1644396412707/work
pyparsing @ file:///tmp/build/80754af9/pyparsing_1635766073266/work
pytest==6.2.4
toml @ file:///tmp/build/80754af9/toml_1616166611790/work
typing_extensions @ file:///opt/conda/conda-bld/typing_extensions_1647553014482/work
-e git+https://github.com/alecthomas/voluptuous.git@32aeeec65d77940655a2905c9f15114586eb785e#egg=voluptuous
zipp @ file:///tmp/build/80754af9/zipp_1633618647012/work

name: voluptuous
channels:
  - defaults
  - https://repo.anaconda.com/pkgs/main
  - https://repo.anaconda.com/pkgs/r
  - conda-forge
dependencies:
  - _libgcc_mutex=0.1=main
  - _openmp_mutex=5.1=1_gnu
  - attrs=21.4.0=pyhd3eb1b0_0
  - ca-certificates=2025.2.25=h06a4308_0
  - certifi=2021.5.30=py36h06a4308_0
  - importlib-metadata=4.8.1=py36h06a4308_0
  - importlib_metadata=4.8.1=hd3eb1b0_0
  - iniconfig=1.1.1=pyhd3eb1b0_0
  - ld_impl_linux-64=2.40=h12ee557_0
  - libffi=3.3=he6710b0_2
  - libgcc-ng=11.2.0=h1234567_1
  - libgomp=11.2.0=h1234567_1
  - libstdcxx-ng=11.2.0=h1234567_1
  - more-itertools=8.12.0=pyhd3eb1b0_0
  - ncurses=6.4=h6a678d5_0
  - openssl=1.1.1w=h7f8727e_0
  - packaging=21.3=pyhd3eb1b0_0
  - pip=21.2.2=py36h06a4308_0
  - pluggy=0.13.1=py36h06a4308_0
  - py=1.11.0=pyhd3eb1b0_0
  - pyparsing=3.0.4=pyhd3eb1b0_0
  - pytest=6.2.4=py36h06a4308_2
  - python=3.6.13=h12debd9_1
  - readline=8.2=h5eee18b_0
  - setuptools=58.0.4=py36h06a4308_0
  - sqlite=3.45.3=h5eee18b_0
  - tk=8.6.14=h39e8969_0
  - toml=0.10.2=pyhd3eb1b0_0
  - typing_extensions=4.1.1=pyh06a4308_0
  - wheel=0.37.1=pyhd3eb1b0_0
  - xz=5.6.4=h5eee18b_1
  - zipp=3.6.0=pyhd3eb1b0_0
  - zlib=1.2.13=h5eee18b_1
  - pip:
      - coverage==6.2
      - nose==1.3.7
prefix: /opt/conda/envs/voluptuous

tests.py::test_literal tests.py::test_list_validation_messages
tests.py::test_required tests.py::test_extra_with_required tests.py::test_iterate_candidates tests.py::test_in tests.py::test_not_in tests.py::test_remove tests.py::test_extra_empty_errors tests.py::test_url_validation tests.py::test_url_validation_with_none tests.py::test_url_validation_with_empty_string tests.py::test_url_validation_without_host tests.py::test_copy_dict_undefined tests.py::test_sorting tests.py::test_schema_extend tests.py::test_schema_extend_overrides tests.py::test_repr
voluptuous.py README.md
voluptuous.py README.md