diff --git a/src/main/java/org/apache/commons/dbcp2/Jdbc41Bridge.java b/src/main/java/org/apache/commons/dbcp2/Jdbc41Bridge.java
index 462b711..72c02e7 100644
--- a/src/main/java/org/apache/commons/dbcp2/Jdbc41Bridge.java
+++ b/src/main/java/org/apache/commons/dbcp2/Jdbc41Bridge.java
@@ -49,7 +49,7 @@
 public class Jdbc41Bridge {
 
     /**
-     * Delegates to {@link Connection#abort(Executor)} without throwing a {@link AbstractMethodError}.
+     * Delegates to {@link Connection#abort(Executor)} without throwing an {@link AbstractMethodError}.
      * <p>
      * If the JDBC driver does not implement {@link Connection#abort(Executor)}, then call {@link Connection#close()}.
      * </p>
@@ -94,7 +94,7 @@
     }
 
     /**
-     * Delegates to {@link Connection#getNetworkTimeout()} without throwing a {@link AbstractMethodError}.
+     * Delegates to {@link Connection#getNetworkTimeout()} without throwing an {@link AbstractMethodError}.
      * <p>
      * If the JDBC driver does not implement {@link Connection#getNetworkTimeout()}, then return 0.
      * </p>
@@ -115,7 +115,7 @@
     }
 
     /**
-     * Delegates to {@link ResultSet#getObject(int, Class)} without throwing a {@link AbstractMethodError}.
+     * Delegates to {@link ResultSet#getObject(int, Class)} without throwing an {@link AbstractMethodError}.
      * <p>
      * If the JDBC driver does not implement {@link ResultSet#getObject(int, Class)}, then return 0.
      * </p>
@@ -215,7 +215,7 @@
     }
 
     /**
-     * Delegates to {@link ResultSet#getObject(String, Class)} without throwing a {@link AbstractMethodError}.
+     * Delegates to {@link ResultSet#getObject(String, Class)} without throwing an {@link AbstractMethodError}.
      *
      * @param <T>
      *            See {@link ResultSet#getObject(String, Class)}
@@ -343,7 +343,7 @@
     }
 
     /**
-     * Delegates to {@link Connection#getSchema()} without throwing a {@link AbstractMethodError}.
+     * Delegates to {@link Connection#getSchema()} without throwing an {@link AbstractMethodError}.
      * <p>
      * If the JDBC driver does not implement {@link Connection#getSchema()}, then return null.
      * </p>
@@ -365,7 +365,7 @@
     }
 
     /**
-     * Delegates to {@link Connection#setNetworkTimeout(Executor, int)} without throwing a {@link AbstractMethodError}.
+     * Delegates to {@link Connection#setNetworkTimeout(Executor, int)} without throwing an {@link AbstractMethodError}.
      * <p>
      * If the JDBC driver does not implement {@link Connection#setNetworkTimeout(Executor, int)}, then do nothing.
      * </p>
@@ -390,7 +390,7 @@
     }
 
     /**
-     * Delegates to {@link Connection#setSchema(String)} without throwing a {@link AbstractMethodError}.
+     * Delegates to {@link Connection#setSchema(String)} without throwing an {@link AbstractMethodError}.
      * <p>
      * If the JDBC driver does not implement {@link Connection#setSchema(String)}, then do nothing.
      * </p>
@@ -412,10 +412,10 @@
     }
 
     /**
-     * Delegates to {@link Statement#closeOnCompletion()} without throwing a {@link AbstractMethodError}.
+     * Delegates to {@link Statement#closeOnCompletion()} without throwing an {@link AbstractMethodError}.
      * <p>
      * If the JDBC driver does not implement {@link Statement#closeOnCompletion()}, then just check that the connection
-     * is closed to then throw a SQLException.
+     * is closed to then throw an SQLException.
      * </p>
      *
      * @param statement
@@ -435,10 +435,10 @@
     }
 
     /**
-     * Delegates to {@link Statement#isCloseOnCompletion()} without throwing a {@link AbstractMethodError}.
+     * Delegates to {@link Statement#isCloseOnCompletion()} without throwing an {@link AbstractMethodError}.
      * <p>
      * If the JDBC driver does not implement {@link Statement#isCloseOnCompletion()}, then just check that the
-     * connection is closed to then throw a SQLException.
+     * connection is closed to then throw an SQLException.
      * </p>
      *
      * @param statement
@@ -460,7 +460,7 @@
     }
 
     /**
-     * Delegates to {@link CommonDataSource#getParentLogger()} without throwing a {@link AbstractMethodError}.
+     * Delegates to {@link CommonDataSource#getParentLogger()} without throwing an {@link AbstractMethodError}.
      * <p>
      * If the JDBC driver does not implement {@link CommonDataSource#getParentLogger()}, then return null.
      * </p>
diff --git a/src/main/java/org/apache/commons/dbcp2/SQLExceptionList.java b/src/main/java/org/apache/commons/dbcp2/SQLExceptionList.java
index e903608..ec43988 100644
--- a/src/main/java/org/apache/commons/dbcp2/SQLExceptionList.java
+++ b/src/main/java/org/apache/commons/dbcp2/SQLExceptionList.java
@@ -21,7 +21,7 @@
 import java.util.List;
 
 /**
- * A SQLException based on a list of Throwable causes.
+ * An SQLException based on a list of Throwable causes.
  * <p>
  * The first exception in the list is used as this exception's cause and is accessible with the usual
  * {@link #getCause()} while the complete list is accessible with {@link #getCauseList()}.
diff --git a/src/main/java/org/apache/commons/dbcp2/managed/LocalXAConnectionFactory.java b/src/main/java/org/apache/commons/dbcp2/managed/LocalXAConnectionFactory.java
index f0c454d..3fa6636 100644
--- a/src/main/java/org/apache/commons/dbcp2/managed/LocalXAConnectionFactory.java
+++ b/src/main/java/org/apache/commons/dbcp2/managed/LocalXAConnectionFactory.java
@@ -65,7 +65,7 @@
          * @param flag
          *            ignored
          * @throws XAException
-         *             if connection.commit() throws a SQLException
+         *             if connection.commit() throws an SQLException
          */
         @Override
         public synchronized void commit(final Xid xid, final boolean flag) throws XAException {
@@ -215,7 +215,7 @@
          * @param xid
          *            the id of the transaction branch for this connection
          * @throws XAException
-         *             if connection.rollback() throws a SQLException
+         *             if connection.rollback() throws an SQLException
          */
         @Override
         public synchronized void rollback(final Xid xid) throws XAException {
