diff --git a/src/main/java/org/apache/sling/contentparser/api/ContentParser.java b/src/main/java/org/apache/sling/contentparser/api/ContentParser.java
index 4b3a29f..28df2c7 100644
--- a/src/main/java/org/apache/sling/contentparser/api/ContentParser.java
+++ b/src/main/java/org/apache/sling/contentparser/api/ContentParser.java
@@ -57,8 +57,7 @@
      * @param contentHandler content handler that accepts the parsed content
      * @param inputStream    stream with serialized content
      * @param parserOptions  parser options, providing different settings for handling the serialized content
-     * @throws IOException    when an I/O error occurs
-     * @throws ParseException when a parsing error occurs.
+     * @throws IOException when an I/O or parsing error occurs
      */
     void parse(ContentHandler contentHandler, InputStream inputStream, ParserOptions parserOptions) throws IOException;
 
diff --git a/src/main/java/org/apache/sling/contentparser/api/ParseException.java b/src/main/java/org/apache/sling/contentparser/api/ParseException.java
deleted file mode 100644
index 4a19711..0000000
--- a/src/main/java/org/apache/sling/contentparser/api/ParseException.java
+++ /dev/null
@@ -1,49 +0,0 @@
-/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
- ~ Licensed to the Apache Software Foundation (ASF) under one
- ~ or more contributor license agreements.  See the NOTICE file
- ~ distributed with this work for additional information
- ~ regarding copyright ownership.  The ASF licenses this file
- ~ to you under the Apache License, Version 2.0 (the
- ~ "License"); you may not use this file except in compliance
- ~ with the License.  You may obtain a copy of the License at
- ~
- ~   http://www.apache.org/licenses/LICENSE-2.0
- ~
- ~ Unless required by applicable law or agreed to in writing,
- ~ software distributed under the License is distributed on an
- ~ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- ~ KIND, either express or implied.  See the License for the
- ~ specific language governing permissions and limitations
- ~ under the License.
- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
-package org.apache.sling.contentparser.api;
-
-import org.osgi.annotation.versioning.ProviderType;
-
-/**
- * Defines a parsing exception encountered by a {@link ContentParser}.
- */
-@ProviderType
-public final class ParseException extends RuntimeException {
-    private static final long serialVersionUID = 1L;
-
-    /**
-     * Builds a {@code ParseException}, providing a message.
-     *
-     * @param message the message
-     */
-    public ParseException(String message) {
-        super(message);
-    }
-
-    /**
-     * Builds a {@code ParseException}, providing a message and a cause.
-     *
-     * @param message the message
-     * @param cause   the cause
-     */
-    public ParseException(String message, Throwable cause) {
-        super(message, cause);
-    }
-
-}
diff --git a/src/main/java/org/apache/sling/contentparser/api/ParserHelper.java b/src/main/java/org/apache/sling/contentparser/api/ParserHelper.java
index a0d3c11..b0a64d7 100644
--- a/src/main/java/org/apache/sling/contentparser/api/ParserHelper.java
+++ b/src/main/java/org/apache/sling/contentparser/api/ParserHelper.java
@@ -69,8 +69,8 @@
      *
      * @param values the multi-value property's values
      * @return an object representation of the multi-value property
-     * @throws ParseException when the provided {@code values} array contains null values, {@link Map} values, or the values are not of the
-     *                        same type
+     * @throws IllegalArgumentException when the provided {@code values} array contains null values, {@link Map} values, or the values are
+     *                                  not of the same type
      */
     public static Object convertSingleTypeArray(Object[] values) {
         if (values.length == 0) {
@@ -79,15 +79,15 @@
         Class<?> itemType = null;
         for (Object value : values) {
             if (value == null) {
-                throw new ParseException("Multi-value array must not contain null values.");
+                throw new IllegalArgumentException("Multi-value array must not contain null values.");
             }
             if (value instanceof Map) {
-                throw new ParseException("Multi-value array must not contain maps/objects.");
+                throw new IllegalArgumentException("Multi-value array must not contain maps/objects.");
             }
             if (itemType == null) {
                 itemType = value.getClass();
             } else if (itemType != value.getClass()) {
-                throw new ParseException("Multi-value array must not contain values with different types "
+                throw new IllegalArgumentException("Multi-value array must not contain values with different types "
                         + "(" + itemType.getName() + ", " + value.getClass().getName() + ").");
             }
         }
diff --git a/src/test/java/org/apache/sling/contentparser/api/ParserHelperTest.java b/src/test/java/org/apache/sling/contentparser/api/ParserHelperTest.java
index 9477414..f79f7e3 100644
--- a/src/test/java/org/apache/sling/contentparser/api/ParserHelperTest.java
+++ b/src/test/java/org/apache/sling/contentparser/api/ParserHelperTest.java
@@ -66,31 +66,31 @@
         assertEquals(empty, ParserHelper.convertSingleTypeArray(empty));
 
         Object[] nullValues = new Object[] {"string", null};
-        ParseException nullValuesException = null;
+        IllegalArgumentException nullValuesException = null;
         try {
             ParserHelper.convertSingleTypeArray(nullValues);
-        } catch (ParseException e) {
+        } catch (IllegalArgumentException e) {
             nullValuesException = e;
         }
-        assertNotNull("Expected a ParseException when the Object array contains multiple types.", nullValuesException);
+        assertNotNull("Expected a IllegalArgumentException when the Object array contains multiple types.", nullValuesException);
 
         Object[] maps = new Object[] {Collections.emptyMap()};
-        ParseException mapsException = null;
+        IllegalArgumentException mapsException = null;
         try {
             ParserHelper.convertSingleTypeArray(maps);
-        } catch (ParseException e) {
+        } catch (IllegalArgumentException e) {
             mapsException = e;
         }
-        assertNotNull("Expected a ParseException when the Object array contains Map objects.", mapsException);
+        assertNotNull("Expected a IllegalArgumentException when the Object array contains Map objects.", mapsException);
 
         Object[] differentTypes = new Object[] {"string", 1, 1L, 1F, Boolean.TRUE};
-        ParseException differentTypesException = null;
+        IllegalArgumentException differentTypesException = null;
         try {
             ParserHelper.convertSingleTypeArray(differentTypes);
-        } catch (ParseException e) {
+        } catch (IllegalArgumentException e) {
             differentTypesException = e;
         }
-        assertNotNull("Expected a ParseException when the Object array contains multiple types.", differentTypesException);
+        assertNotNull("Expected a IllegalArgumentException when the Object array contains multiple types.", differentTypesException);
 
         Object[] values = new Object[] {1, 2, 3, 4, 5};
         Object result = ParserHelper.convertSingleTypeArray(values);
