diff --git a/asterix-external-data/src/test/java/edu/uci/ics/asterix/external/library/adaptor/TestTypedAdaptor.java b/asterix-external-data/src/test/java/edu/uci/ics/asterix/external/library/adapter/TestTypedAdapter.java
similarity index 94%
rename from asterix-external-data/src/test/java/edu/uci/ics/asterix/external/library/adaptor/TestTypedAdaptor.java
rename to asterix-external-data/src/test/java/edu/uci/ics/asterix/external/library/adapter/TestTypedAdapter.java
index cb0142a..07f1a40 100644
--- a/asterix-external-data/src/test/java/edu/uci/ics/asterix/external/library/adaptor/TestTypedAdaptor.java
+++ b/asterix-external-data/src/test/java/edu/uci/ics/asterix/external/library/adapter/TestTypedAdapter.java
@@ -12,7 +12,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package edu.uci.ics.asterix.external.library.adaptor;
+package edu.uci.ics.asterix.external.library.adapter;
 
 import java.io.IOException;
 import java.io.InputStream;
@@ -30,7 +30,7 @@
 import edu.uci.ics.hyracks.api.context.IHyracksTaskContext;
 import edu.uci.ics.hyracks.dataflow.std.file.ITupleParserFactory;
 
-public class TestTypedAdaptor extends StreamBasedAdapter implements IFeedAdapter {
+public class TestTypedAdapter extends StreamBasedAdapter implements IFeedAdapter {
 
     private static final long serialVersionUID = 1L;
 
@@ -42,7 +42,7 @@
 
     private DummyGenerator generator;
 
-    public TestTypedAdaptor(ITupleParserFactory parserFactory, ARecordType sourceDatatype, IHyracksTaskContext ctx,
+    public TestTypedAdapter(ITupleParserFactory parserFactory, ARecordType sourceDatatype, IHyracksTaskContext ctx,
             Map<String, String> configuration) throws IOException {
         super(parserFactory, sourceDatatype, ctx);
         pos = new PipedOutputStream();
@@ -71,7 +71,7 @@
         private boolean continueIngestion;
 
         public DummyGenerator(Map<String, String> configuration, OutputStream os) {
-            nOutputRecords = Integer.parseInt(configuration.get(TestTypedAdaptorFactory.KEY_NUM_OUTPUT_RECORDS));
+            nOutputRecords = Integer.parseInt(configuration.get(TestTypedAdapterFactory.KEY_NUM_OUTPUT_RECORDS));
             this.os = os;
             this.continueIngestion = true;
         }
diff --git a/asterix-external-data/src/test/java/edu/uci/ics/asterix/external/library/adaptor/TestTypedAdaptorFactory.java b/asterix-external-data/src/test/java/edu/uci/ics/asterix/external/library/adapter/TestTypedAdapterFactory.java
similarity index 89%
rename from asterix-external-data/src/test/java/edu/uci/ics/asterix/external/library/adaptor/TestTypedAdaptorFactory.java
rename to asterix-external-data/src/test/java/edu/uci/ics/asterix/external/library/adapter/TestTypedAdapterFactory.java
index 365b6dd..ed953af 100644
--- a/asterix-external-data/src/test/java/edu/uci/ics/asterix/external/library/adaptor/TestTypedAdaptorFactory.java
+++ b/asterix-external-data/src/test/java/edu/uci/ics/asterix/external/library/adapter/TestTypedAdapterFactory.java
@@ -12,7 +12,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package edu.uci.ics.asterix.external.library.adaptor;
+package edu.uci.ics.asterix.external.library.adapter;
 
 import java.util.Map;
 
@@ -28,9 +28,9 @@
 import edu.uci.ics.hyracks.api.context.IHyracksTaskContext;
 import edu.uci.ics.hyracks.dataflow.std.file.ITupleParserFactory;
 
-public class TestTypedAdaptorFactory implements ITypedAdapterFactory {
+public class TestTypedAdapterFactory implements ITypedAdapterFactory {
 
-    public static final String NAME = "test_typed_adaptor";
+    public static final String NAME = "test_typed_adapter";
 
     private static ARecordType adapterOutputType = initOutputType();
 
@@ -48,9 +48,9 @@
         IAType[] fieldTypes = new IAType[] { BuiltinType.AINT64, BuiltinType.ASTRING };
         ARecordType outputType = null;
         try {
-            outputType = new ARecordType("TestTypedAdaptorOutputType", fieldNames, fieldTypes, false);
+            outputType = new ARecordType("TestTypedAdapterOutputType", fieldNames, fieldTypes, false);
         } catch (AsterixException exception) {
-            throw new IllegalStateException("Unable to create output type for adaptor " + NAME);
+            throw new IllegalStateException("Unable to create output type for adapter " + NAME);
         }
         return outputType;
     }
@@ -73,7 +73,7 @@
     @Override
     public IDatasourceAdapter createAdapter(IHyracksTaskContext ctx, int partition) throws Exception {
         ITupleParserFactory tupleParserFactory = new AdmSchemafullRecordParserFactory(adapterOutputType, false, -1, null);
-        return new TestTypedAdaptor(tupleParserFactory, adapterOutputType, ctx, configuration);
+        return new TestTypedAdapter(tupleParserFactory, adapterOutputType, ctx, configuration);
     }
 
     @Override
diff --git a/asterix-external-data/src/test/resources/text_functions.xml b/asterix-external-data/src/test/resources/text_functions.xml
index a0b7bf9..8c7a92c 100644
--- a/asterix-external-data/src/test/resources/text_functions.xml
+++ b/asterix-external-data/src/test/resources/text_functions.xml
@@ -52,8 +52,8 @@
 	</libraryFunctions>
 	<libraryAdapters>
 		<libraryAdapter>
-			<name>test_typed_adaptor</name>
-			<factory_class>edu.uci.ics.asterix.external.library.adaptor.TestTypedAdaptorFactory</factory_class>
+			<name>test_typed_adapter</name>
+			<factory_class>edu.uci.ics.asterix.external.library.adapter.TestTypedAdapterFactory</factory_class>
 		</libraryAdapter>
 	</libraryAdapters>
 </externalLibrary>
