You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@asterixdb.apache.org by al...@apache.org on 2019/04/11 23:05:04 UTC

[asterixdb] branch master updated: [ASTERIXDB-2516][RT] Move primitive comparators to Hyracks and make singleton

This is an automated email from the ASF dual-hosted git repository.

alsuliman pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/asterixdb.git


The following commit(s) were added to refs/heads/master by this push:
     new 967356d  [ASTERIXDB-2516][RT] Move primitive comparators to Hyracks and make singleton
967356d is described below

commit 967356da50802497e4af805587447554b6ad0df7
Author: Ali Alsuliman <al...@gmail.com>
AuthorDate: Wed Apr 10 21:43:56 2019 -0700

    [ASTERIXDB-2516][RT] Move primitive comparators to Hyracks and make singleton
    
    - user model changes: no
    - storage format changes: no
    - interface changes: no
    
    Details:
    - moved 2 comparators, boolean and long comparators from asterix to hyracks.
    - added byte, short, integer, float and double comparator
    factories to Hyracks to replace PointableBinaryComparatorFactory.
    - removed checking lengths of 0 from PointableBinaryComparatorFactory.
    - changed tests to use the primitive factories.
    
    Change-Id: If15dc4e0dd0db942a4cadb15abbe56cbfe617b48
    Reviewed-on: https://asterix-gerrit.ics.uci.edu/3294
    Tested-by: Jenkins <je...@fulliautomatix.ics.uci.edu>
    Integration-Tests: Jenkins <je...@fulliautomatix.ics.uci.edu>
    Contrib: Jenkins <je...@fulliautomatix.ics.uci.edu>
    Reviewed-by: Dmitry Lychagin <dm...@couchbase.com>
---
 .../asterix/app/io/PersistedResourceRegistry.java  |  14 ++-
 .../InvertedIndexResourceFactoryProvider.java      |   4 +-
 ...aryCorrelatedInvertedIndexOperationsHelper.java |   6 +-
 .../SecondaryInvertedIndexOperationsHelper.java    |   6 +-
 .../comparators/AGenericAscBinaryComparator.java   |   2 +-
 .../comparators/AGenericDescBinaryComparator.java  |  10 +-
 .../AbstractAGenericBinaryComparator.java          |  50 +++-----
 .../ListItemBinaryComparatorFactory.java           |  17 ++-
 .../comparators/LogicalScalarBinaryComparator.java |  55 ++++-----
 .../nontagged/BinaryComparatorFactoryProvider.java |  33 +++---
 .../common/AbstractAsterixListIterator.java        |   2 +-
 .../tests/pushruntime/PushRuntimeTest.java         |  22 ++--
 .../accessors}/BooleanBinaryComparatorFactory.java |  15 +--
 .../std/accessors/ByteBinaryComparatorFactory.java |  18 +--
 .../accessors/DoubleBinaryComparatorFactory.java   |  18 +--
 .../accessors/FloatBinaryComparatorFactory.java    |  18 +--
 .../accessors/IntegerBinaryComparatorFactory.java  |  18 +--
 .../accessors}/LongBinaryComparatorFactory.java    |  14 +--
 .../PointableBinaryComparatorFactory.java          |   4 -
 .../accessors/ShortBinaryComparatorFactory.java    |  18 +--
 .../data/std/primitive/BooleanPointable.java       |  13 ++-
 .../hyracks/data/std/primitive/BytePointable.java  |  29 ++---
 .../data/std/primitive/DoublePointable.java        |  27 ++---
 .../hyracks/data/std/primitive/FloatPointable.java |  27 ++---
 .../data/std/primitive/IntegerPointable.java       |  27 ++---
 .../hyracks/data/std/primitive/LongPointable.java  |  27 ++---
 .../hyracks/data/std/primitive/ShortPointable.java |  27 ++---
 .../apache/hyracks/data/std/util/DataUtils.java    |   6 +
 .../hyracks/dataflow/common/utils/SerdeUtils.java  |  16 ++-
 .../btree/client/InsertPipelineExample.java        |   5 +-
 .../btree/client/PrimaryIndexBulkLoadExample.java  |   4 +-
 .../btree/client/PrimaryIndexSearchExample.java    |   4 +-
 .../client/SecondaryIndexBulkLoadExample.java      |   3 +-
 .../btree/client/SecondaryIndexSearchExample.java  |   5 +-
 .../tests/am/rtree/AbstractRTreeOperatorTest.java  |  17 +--
 .../tests/integration/CountOfCountsTest.java       |  44 +++----
 .../tests/unit/AbstractRunGeneratorTest.java       |   9 +-
 .../unit/IntersectOperatorDescriptorTest.java      |   8 +-
 .../hyracks/examples/tpch/client/Groupby.java      |  10 +-
 .../am/rtree/frames/RTreeNSMInteriorFrame.java     |   5 +-
 .../storage/am/btree/OrderedIndexExamplesTest.java |  13 ++-
 .../am/rtree/AbstractRTreeExamplesTest.java        | 126 +++++++++++----------
 .../storage/am/btree/BTreeSearchCursorTest.java    |  15 ++-
 .../hyracks/storage/am/btree/BTreeStatsTest.java   |   4 +-
 .../storage/am/btree/BTreeUpdateSearchTest.java    |   4 +-
 .../storage/am/btree/FieldPrefixNSMTest.java       |   8 +-
 .../storage/am/lsm/btree/LSMBTreeExamplesTest.java |   7 +-
 .../cursor/LSMBTreePointSearchCursorTest.java      |   5 +-
 .../ondisk/OnDiskInvertedIndexLifecycleTest.java   |   3 +-
 .../am/lsm/rtree/AbstractLSMRTreeExamplesTest.java |  27 +++--
 .../storage/am/rtree/RTreeSearchCursorTest.java    |   8 +-
 51 files changed, 375 insertions(+), 502 deletions(-)

diff --git a/asterixdb/asterix-app/src/main/java/org/apache/asterix/app/io/PersistedResourceRegistry.java b/asterixdb/asterix-app/src/main/java/org/apache/asterix/app/io/PersistedResourceRegistry.java
index f02fdba..1c83ce0 100644
--- a/asterixdb/asterix-app/src/main/java/org/apache/asterix/app/io/PersistedResourceRegistry.java
+++ b/asterixdb/asterix-app/src/main/java/org/apache/asterix/app/io/PersistedResourceRegistry.java
@@ -47,9 +47,7 @@ import org.apache.asterix.dataflow.data.nontagged.comparators.APointPartialBinar
 import org.apache.asterix.dataflow.data.nontagged.comparators.APolygonPartialBinaryComparatorFactory;
 import org.apache.asterix.dataflow.data.nontagged.comparators.ARectanglePartialBinaryComparatorFactory;
 import org.apache.asterix.dataflow.data.nontagged.comparators.AUUIDPartialBinaryComparatorFactory;
-import org.apache.asterix.dataflow.data.nontagged.comparators.BooleanBinaryComparatorFactory;
 import org.apache.asterix.dataflow.data.nontagged.comparators.ListItemBinaryComparatorFactory;
-import org.apache.asterix.dataflow.data.nontagged.comparators.LongBinaryComparatorFactory;
 import org.apache.asterix.dataflow.data.nontagged.valueproviders.PrimitiveValueProviderFactory;
 import org.apache.asterix.formats.nontagged.AnyBinaryComparatorFactory;
 import org.apache.asterix.formats.nontagged.OrderedBinaryComparatorFactory;
@@ -70,8 +68,15 @@ import org.apache.asterix.transaction.management.opcallbacks.SecondaryIndexOpera
 import org.apache.hyracks.api.exceptions.HyracksDataException;
 import org.apache.hyracks.api.io.IJsonSerializable;
 import org.apache.hyracks.api.io.IPersistedResourceRegistry;
+import org.apache.hyracks.data.std.accessors.BooleanBinaryComparatorFactory;
+import org.apache.hyracks.data.std.accessors.ByteBinaryComparatorFactory;
+import org.apache.hyracks.data.std.accessors.DoubleBinaryComparatorFactory;
+import org.apache.hyracks.data.std.accessors.FloatBinaryComparatorFactory;
+import org.apache.hyracks.data.std.accessors.IntegerBinaryComparatorFactory;
+import org.apache.hyracks.data.std.accessors.LongBinaryComparatorFactory;
 import org.apache.hyracks.data.std.accessors.PointableBinaryComparatorFactory;
 import org.apache.hyracks.data.std.accessors.RawBinaryComparatorFactory;
+import org.apache.hyracks.data.std.accessors.ShortBinaryComparatorFactory;
 import org.apache.hyracks.data.std.primitive.BooleanPointable;
 import org.apache.hyracks.data.std.primitive.ByteArrayPointable;
 import org.apache.hyracks.data.std.primitive.BytePointable;
@@ -210,6 +215,11 @@ public class PersistedResourceRegistry implements IPersistedResourceRegistry {
         REGISTERED_CLASSES.put("AnyBinaryComparatorFactory", AnyBinaryComparatorFactory.class);
         REGISTERED_CLASSES.put("OrderedBinaryComparatorFactory", OrderedBinaryComparatorFactory.class);
         REGISTERED_CLASSES.put("OrderedLinearizeComparatorFactory", OrderedLinearizeComparatorFactory.class);
+        REGISTERED_CLASSES.put("ByteBinaryComparatorFactory", ByteBinaryComparatorFactory.class);
+        REGISTERED_CLASSES.put("ShortBinaryComparatorFactory", ShortBinaryComparatorFactory.class);
+        REGISTERED_CLASSES.put("IntegerBinaryComparatorFactory", IntegerBinaryComparatorFactory.class);
+        REGISTERED_CLASSES.put("FloatBinaryComparatorFactory", FloatBinaryComparatorFactory.class);
+        REGISTERED_CLASSES.put("DoubleBinaryComparatorFactory", DoubleBinaryComparatorFactory.class);
 
         // IPointableFactory
         REGISTERED_CLASSES.put("AIntervalPointableFactory", AIntervalPointable.AIntervalPointableFactory.class);
diff --git a/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/utils/InvertedIndexResourceFactoryProvider.java b/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/utils/InvertedIndexResourceFactoryProvider.java
index 43cc0ec..fe67e64 100644
--- a/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/utils/InvertedIndexResourceFactoryProvider.java
+++ b/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/utils/InvertedIndexResourceFactoryProvider.java
@@ -40,7 +40,7 @@ import org.apache.hyracks.algebricks.common.exceptions.AlgebricksException;
 import org.apache.hyracks.algebricks.common.utils.Pair;
 import org.apache.hyracks.api.dataflow.value.IBinaryComparatorFactory;
 import org.apache.hyracks.api.dataflow.value.ITypeTraits;
-import org.apache.hyracks.data.std.accessors.PointableBinaryComparatorFactory;
+import org.apache.hyracks.data.std.accessors.ShortBinaryComparatorFactory;
 import org.apache.hyracks.data.std.primitive.ShortPointable;
 import org.apache.hyracks.storage.am.common.api.IMetadataPageManagerFactory;
 import org.apache.hyracks.storage.am.lsm.common.api.ILSMIOOperationCallbackFactory;
@@ -209,7 +209,7 @@ public class InvertedIndexResourceFactoryProvider implements IResourceFactoryPro
         tokenComparatorFactories[0] = NonTaggedFormatUtil.getTokenBinaryComparatorFactory(secondaryKeyType);
         if (isPartitioned) {
             // The partitioning field is hardcoded to be a short *without* an Asterix type tag.
-            tokenComparatorFactories[1] = PointableBinaryComparatorFactory.of(ShortPointable.FACTORY);
+            tokenComparatorFactories[1] = ShortBinaryComparatorFactory.INSTANCE;
         }
         return tokenComparatorFactories;
     }
diff --git a/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/utils/SecondaryCorrelatedInvertedIndexOperationsHelper.java b/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/utils/SecondaryCorrelatedInvertedIndexOperationsHelper.java
index 4699c82..25071bc 100644
--- a/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/utils/SecondaryCorrelatedInvertedIndexOperationsHelper.java
+++ b/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/utils/SecondaryCorrelatedInvertedIndexOperationsHelper.java
@@ -46,7 +46,7 @@ import org.apache.hyracks.api.dataflow.value.ITypeTraits;
 import org.apache.hyracks.api.dataflow.value.RecordDescriptor;
 import org.apache.hyracks.api.exceptions.SourceLocation;
 import org.apache.hyracks.api.job.JobSpecification;
-import org.apache.hyracks.data.std.accessors.PointableBinaryComparatorFactory;
+import org.apache.hyracks.data.std.accessors.ShortBinaryComparatorFactory;
 import org.apache.hyracks.data.std.primitive.ShortPointable;
 import org.apache.hyracks.dataflow.common.data.marshalling.ShortSerializerDeserializer;
 import org.apache.hyracks.dataflow.std.base.AbstractOperatorDescriptor;
@@ -139,7 +139,7 @@ public class SecondaryCorrelatedInvertedIndexOperationsHelper extends SecondaryC
         tokenTypeTraits[0] = NonTaggedFormatUtil.getTokenTypeTrait(secondaryKeyType);
         if (isPartitioned) {
             // The partitioning field is hardcoded to be a short *without* an Asterix type tag.
-            tokenComparatorFactories[1] = PointableBinaryComparatorFactory.of(ShortPointable.FACTORY);
+            tokenComparatorFactories[1] = ShortBinaryComparatorFactory.INSTANCE;
             tokenTypeTraits[1] = ShortPointable.TYPE_TRAITS;
         }
         // Set tokenizer factory.
@@ -171,7 +171,7 @@ public class SecondaryCorrelatedInvertedIndexOperationsHelper extends SecondaryC
         if (isPartitioned) {
             tokenKeyPairFields[1] = ShortSerializerDeserializer.INSTANCE;
             tokenKeyPairTypeTraits[1] = tokenTypeTraits[1];
-            tokenKeyPairComparatorFactories[1] = PointableBinaryComparatorFactory.of(ShortPointable.FACTORY);
+            tokenKeyPairComparatorFactories[1] = ShortBinaryComparatorFactory.INSTANCE;
             pkOff = 2;
         }
         if (numPrimaryKeys > 0) {
diff --git a/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/utils/SecondaryInvertedIndexOperationsHelper.java b/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/utils/SecondaryInvertedIndexOperationsHelper.java
index afb562c..bd1f191 100644
--- a/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/utils/SecondaryInvertedIndexOperationsHelper.java
+++ b/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/utils/SecondaryInvertedIndexOperationsHelper.java
@@ -47,7 +47,7 @@ import org.apache.hyracks.api.dataflow.value.ITypeTraits;
 import org.apache.hyracks.api.dataflow.value.RecordDescriptor;
 import org.apache.hyracks.api.exceptions.SourceLocation;
 import org.apache.hyracks.api.job.JobSpecification;
-import org.apache.hyracks.data.std.accessors.PointableBinaryComparatorFactory;
+import org.apache.hyracks.data.std.accessors.ShortBinaryComparatorFactory;
 import org.apache.hyracks.data.std.primitive.ShortPointable;
 import org.apache.hyracks.dataflow.common.data.marshalling.ShortSerializerDeserializer;
 import org.apache.hyracks.dataflow.std.base.AbstractOperatorDescriptor;
@@ -141,7 +141,7 @@ public class SecondaryInvertedIndexOperationsHelper extends SecondaryTreeIndexOp
         tokenTypeTraits[0] = NonTaggedFormatUtil.getTokenTypeTrait(secondaryKeyType);
         if (isPartitioned) {
             // The partitioning field is hardcoded to be a short *without* an Asterix type tag.
-            tokenComparatorFactories[1] = PointableBinaryComparatorFactory.of(ShortPointable.FACTORY);
+            tokenComparatorFactories[1] = ShortBinaryComparatorFactory.INSTANCE;
             tokenTypeTraits[1] = ShortPointable.TYPE_TRAITS;
         }
         // Set tokenizer factory.
@@ -173,7 +173,7 @@ public class SecondaryInvertedIndexOperationsHelper extends SecondaryTreeIndexOp
         if (isPartitioned) {
             tokenKeyPairFields[1] = ShortSerializerDeserializer.INSTANCE;
             tokenKeyPairTypeTraits[1] = tokenTypeTraits[1];
-            tokenKeyPairComparatorFactories[1] = PointableBinaryComparatorFactory.of(ShortPointable.FACTORY);
+            tokenKeyPairComparatorFactories[1] = ShortBinaryComparatorFactory.INSTANCE;
             pkOff = 2;
         }
         if (numPrimaryKeys > 0) {
diff --git a/asterixdb/asterix-om/src/main/java/org/apache/asterix/dataflow/data/nontagged/comparators/AGenericAscBinaryComparator.java b/asterixdb/asterix-om/src/main/java/org/apache/asterix/dataflow/data/nontagged/comparators/AGenericAscBinaryComparator.java
index f8c0285..f78c4b3 100644
--- a/asterixdb/asterix-om/src/main/java/org/apache/asterix/dataflow/data/nontagged/comparators/AGenericAscBinaryComparator.java
+++ b/asterixdb/asterix-om/src/main/java/org/apache/asterix/dataflow/data/nontagged/comparators/AGenericAscBinaryComparator.java
@@ -21,7 +21,7 @@ package org.apache.asterix.dataflow.data.nontagged.comparators;
 import org.apache.asterix.om.types.IAType;
 import org.apache.hyracks.api.exceptions.HyracksDataException;
 
-class AGenericAscBinaryComparator extends AbstractAGenericBinaryComparator {
+final class AGenericAscBinaryComparator extends AbstractAGenericBinaryComparator {
 
     AGenericAscBinaryComparator(IAType leftType, IAType rightType) {
         super(leftType, rightType);
diff --git a/asterixdb/asterix-om/src/main/java/org/apache/asterix/dataflow/data/nontagged/comparators/AGenericDescBinaryComparator.java b/asterixdb/asterix-om/src/main/java/org/apache/asterix/dataflow/data/nontagged/comparators/AGenericDescBinaryComparator.java
index 031c239..3f958bf 100644
--- a/asterixdb/asterix-om/src/main/java/org/apache/asterix/dataflow/data/nontagged/comparators/AGenericDescBinaryComparator.java
+++ b/asterixdb/asterix-om/src/main/java/org/apache/asterix/dataflow/data/nontagged/comparators/AGenericDescBinaryComparator.java
@@ -19,16 +19,12 @@
 package org.apache.asterix.dataflow.data.nontagged.comparators;
 
 import org.apache.asterix.om.types.IAType;
-import org.apache.hyracks.api.dataflow.value.IBinaryComparator;
 import org.apache.hyracks.api.exceptions.HyracksDataException;
 
-class AGenericDescBinaryComparator extends AbstractAGenericBinaryComparator {
+final class AGenericDescBinaryComparator extends AbstractAGenericBinaryComparator {
 
     // interval asc and desc comparators are not the inverse of each other.
     // thus, we need to specify the interval desc comparator factory for descending comparisons.
-    private final IBinaryComparator descIntervalComp =
-            AIntervalDescPartialBinaryComparatorFactory.INSTANCE.createBinaryComparator();
-
     AGenericDescBinaryComparator(IAType leftType, IAType rightType) {
         super(leftType, rightType);
     }
@@ -39,7 +35,7 @@ class AGenericDescBinaryComparator extends AbstractAGenericBinaryComparator {
     }
 
     @Override
-    protected int compareInterval(byte[] b1, int s1, int l1, byte[] b2, int s2, int l2) throws HyracksDataException {
-        return -descIntervalComp.compare(b1, s1 + 1, l1 - 1, b2, s2 + 1, l2 - 1);
+    protected int compareInterval(byte[] b1, int s1, int l1, byte[] b2, int s2, int l2) {
+        return -AIntervalDescPartialBinaryComparatorFactory.compare(b1, s1 + 1, l1 - 1, b2, s2 + 1, l2 - 1);
     }
 }
diff --git a/asterixdb/asterix-om/src/main/java/org/apache/asterix/dataflow/data/nontagged/comparators/AbstractAGenericBinaryComparator.java b/asterixdb/asterix-om/src/main/java/org/apache/asterix/dataflow/data/nontagged/comparators/AbstractAGenericBinaryComparator.java
index da51bc3..4510310 100644
--- a/asterixdb/asterix-om/src/main/java/org/apache/asterix/dataflow/data/nontagged/comparators/AbstractAGenericBinaryComparator.java
+++ b/asterixdb/asterix-om/src/main/java/org/apache/asterix/dataflow/data/nontagged/comparators/AbstractAGenericBinaryComparator.java
@@ -47,6 +47,7 @@ import org.apache.hyracks.data.std.accessors.PointableBinaryComparatorFactory;
 import org.apache.hyracks.data.std.accessors.RawBinaryComparatorFactory;
 import org.apache.hyracks.data.std.api.IMutableValueStorage;
 import org.apache.hyracks.data.std.api.IPointable;
+import org.apache.hyracks.data.std.primitive.BooleanPointable;
 import org.apache.hyracks.data.std.primitive.ByteArrayPointable;
 import org.apache.hyracks.data.std.primitive.UTF8StringPointable;
 import org.apache.hyracks.data.std.util.ArrayBackedValueStorage;
@@ -57,29 +58,10 @@ import org.apache.hyracks.data.std.util.ArrayBackedValueStorage;
  */
 abstract class AbstractAGenericBinaryComparator implements IBinaryComparator {
 
-    private final IBinaryComparator ascBoolComp = BooleanBinaryComparatorFactory.INSTANCE.createBinaryComparator();
     private final IBinaryComparator ascStrComp =
             new PointableBinaryComparatorFactory(UTF8StringPointable.FACTORY).createBinaryComparator();
     private final IBinaryComparator ascByteArrayComp =
             new PointableBinaryComparatorFactory(ByteArrayPointable.FACTORY).createBinaryComparator();
-    private final IBinaryComparator ascRectangleComp =
-            ARectanglePartialBinaryComparatorFactory.INSTANCE.createBinaryComparator();
-    private final IBinaryComparator ascCircleComp =
-            ACirclePartialBinaryComparatorFactory.INSTANCE.createBinaryComparator();
-    private final IBinaryComparator ascDurationComp =
-            ADurationPartialBinaryComparatorFactory.INSTANCE.createBinaryComparator();
-    private final IBinaryComparator ascIntervalComp =
-            AIntervalAscPartialBinaryComparatorFactory.INSTANCE.createBinaryComparator();
-    private final IBinaryComparator ascLineComp = ALinePartialBinaryComparatorFactory.INSTANCE.createBinaryComparator();
-    private final IBinaryComparator ascPointComp =
-            APointPartialBinaryComparatorFactory.INSTANCE.createBinaryComparator();
-    private final IBinaryComparator ascPoint3DComp =
-            APoint3DPartialBinaryComparatorFactory.INSTANCE.createBinaryComparator();
-    private final IBinaryComparator ascPolygonComp =
-            APolygonPartialBinaryComparatorFactory.INSTANCE.createBinaryComparator();
-    private final IBinaryComparator ascUUIDComp = AUUIDPartialBinaryComparatorFactory.INSTANCE.createBinaryComparator();
-    private final IBinaryComparator rawComp = RawBinaryComparatorFactory.INSTANCE.createBinaryComparator();
-
     // the type fields can be null
     protected final IAType leftType;
     protected final IAType rightType;
@@ -109,7 +91,7 @@ abstract class AbstractAGenericBinaryComparator implements IBinaryComparator {
         ATypeTag tag2 = EnumDeserializer.ATYPETAGDESERIALIZER.deserialize(b2[s2]);
         // tag being null could mean several things among of which is that the passed args are not tagged
         if (tag1 == null || tag2 == null) {
-            return rawComp.compare(b1, s1, l1, b2, s2, l2);
+            return RawBinaryComparatorFactory.compare(b1, s1, l1, b2, s2, l2);
         }
         if (ATypeHierarchy.isCompatible(tag1, tag2) && ATypeHierarchy.getTypeDomain(tag1) == Domain.NUMERIC) {
             return ComparatorUtil.compareNumbers(tag1, b1, s1 + 1, tag2, b2, s2 + 1);
@@ -123,9 +105,9 @@ abstract class AbstractAGenericBinaryComparator implements IBinaryComparator {
             case STRING:
                 return ascStrComp.compare(b1, s1 + 1, l1 - 1, b2, s2 + 1, l2 - 1);
             case UUID:
-                return ascUUIDComp.compare(b1, s1 + 1, l1 - 1, b2, s2 + 1, l2 - 1);
+                return AUUIDPartialBinaryComparatorFactory.compare(b1, s1 + 1, l1 - 1, b2, s2 + 1, l2 - 1);
             case BOOLEAN:
-                return ascBoolComp.compare(b1, s1 + 1, l1 - 1, b2, s2 + 1, l2 - 1);
+                return BooleanPointable.compare(b1, s1 + 1, l1 - 1, b2, s2 + 1, l2 - 1);
             case TIME:
                 return Integer.compare(ATimeSerializerDeserializer.getChronon(b1, s1 + 1),
                         ATimeSerializerDeserializer.getChronon(b2, s2 + 1));
@@ -142,19 +124,19 @@ abstract class AbstractAGenericBinaryComparator implements IBinaryComparator {
                 return Long.compare(ADayTimeDurationSerializerDeserializer.getDayTime(b1, s1 + 1),
                         ADayTimeDurationSerializerDeserializer.getDayTime(b2, s2 + 1));
             case RECTANGLE:
-                return ascRectangleComp.compare(b1, s1 + 1, l1 - 1, b2, s2 + 1, l2 - 1);
+                return ARectanglePartialBinaryComparatorFactory.compare(b1, s1 + 1, l1 - 1, b2, s2 + 1, l2 - 1);
             case CIRCLE:
-                return ascCircleComp.compare(b1, s1 + 1, l1 - 1, b2, s2 + 1, l2 - 1);
+                return ACirclePartialBinaryComparatorFactory.compare(b1, s1 + 1, l1 - 1, b2, s2 + 1, l2 - 1);
             case POINT:
-                return ascPointComp.compare(b1, s1 + 1, l1 - 1, b2, s2 + 1, l2 - 1);
+                return APointPartialBinaryComparatorFactory.compare(b1, s1 + 1, l1 - 1, b2, s2 + 1, l2 - 1);
             case POINT3D:
-                return ascPoint3DComp.compare(b1, s1 + 1, l1 - 1, b2, s2 + 1, l2 - 1);
+                return APoint3DPartialBinaryComparatorFactory.compare(b1, s1 + 1, l1 - 1, b2, s2 + 1, l2 - 1);
             case LINE:
-                return ascLineComp.compare(b1, s1 + 1, l1 - 1, b2, s2 + 1, l2 - 1);
+                return ALinePartialBinaryComparatorFactory.compare(b1, s1 + 1, l1 - 1, b2, s2 + 1, l2 - 1);
             case POLYGON:
-                return ascPolygonComp.compare(b1, s1 + 1, l1 - 1, b2, s2 + 1, l2 - 1);
+                return APolygonPartialBinaryComparatorFactory.compare(b1, s1 + 1, l1 - 1, b2, s2 + 1, l2 - 1);
             case DURATION:
-                return ascDurationComp.compare(b1, s1 + 1, l1 - 1, b2, s2 + 1, l2 - 1);
+                return ADurationPartialBinaryComparatorFactory.compare(b1, s1 + 1, l1 - 1, b2, s2 + 1, l2 - 1);
             case INTERVAL:
                 return compareInterval(b1, s1, l1, b2, s2, l2);
             case BINARY:
@@ -164,18 +146,18 @@ abstract class AbstractAGenericBinaryComparator implements IBinaryComparator {
             case OBJECT:
                 return compareRecords(leftType, b1, s1, l1, rightType, b2, s2, l2);
             default:
-                return rawComp.compare(b1, s1, l1, b2, s2, l2);
+                return RawBinaryComparatorFactory.compare(b1, s1, l1, b2, s2, l2);
         }
     }
 
-    protected int compareInterval(byte[] b1, int s1, int l1, byte[] b2, int s2, int l2) throws HyracksDataException {
-        return ascIntervalComp.compare(b1, s1 + 1, l1 - 1, b2, s2 + 1, l2 - 1);
+    protected int compareInterval(byte[] b1, int s1, int l1, byte[] b2, int s2, int l2) {
+        return AIntervalAscPartialBinaryComparatorFactory.compare(b1, s1 + 1, l1 - 1, b2, s2 + 1, l2 - 1);
     }
 
     private int compareArrays(IAType leftType, byte[] b1, int s1, int l1, IAType rightType, byte[] b2, int s2, int l2)
             throws HyracksDataException {
         if (leftType == null || rightType == null) {
-            return rawComp.compare(b1, s1, l1, b2, s2, l2);
+            return RawBinaryComparatorFactory.compare(b1, s1, l1, b2, s2, l2);
         }
         int leftNumItems = ListAccessorUtil.numberOfItems(b1, s1);
         int rightNumItems = ListAccessorUtil.numberOfItems(b2, s2);
@@ -216,7 +198,7 @@ abstract class AbstractAGenericBinaryComparator implements IBinaryComparator {
     private int compareRecords(IAType leftType, byte[] b1, int s1, int l1, IAType rightType, byte[] b2, int s2, int l2)
             throws HyracksDataException {
         if (leftType == null || rightType == null) {
-            return rawComp.compare(b1, s1, l1, b2, s2, l2);
+            return RawBinaryComparatorFactory.compare(b1, s1, l1, b2, s2, l2);
         }
         ARecordType leftRecordType = (ARecordType) TypeComputeUtils.getActualTypeOrOpen(leftType, ATypeTag.OBJECT);
         ARecordType rightRecordType = (ARecordType) TypeComputeUtils.getActualTypeOrOpen(rightType, ATypeTag.OBJECT);
diff --git a/asterixdb/asterix-om/src/main/java/org/apache/asterix/dataflow/data/nontagged/comparators/ListItemBinaryComparatorFactory.java b/asterixdb/asterix-om/src/main/java/org/apache/asterix/dataflow/data/nontagged/comparators/ListItemBinaryComparatorFactory.java
index 1799559..d9cbdd9 100644
--- a/asterixdb/asterix-om/src/main/java/org/apache/asterix/dataflow/data/nontagged/comparators/ListItemBinaryComparatorFactory.java
+++ b/asterixdb/asterix-om/src/main/java/org/apache/asterix/dataflow/data/nontagged/comparators/ListItemBinaryComparatorFactory.java
@@ -26,12 +26,14 @@ import org.apache.hyracks.api.dataflow.value.IBinaryComparatorFactory;
 import org.apache.hyracks.api.exceptions.HyracksDataException;
 import org.apache.hyracks.api.io.IJsonSerializable;
 import org.apache.hyracks.api.io.IPersistedResourceRegistry;
+import org.apache.hyracks.data.std.accessors.BooleanBinaryComparatorFactory;
+import org.apache.hyracks.data.std.accessors.DoubleBinaryComparatorFactory;
+import org.apache.hyracks.data.std.accessors.FloatBinaryComparatorFactory;
+import org.apache.hyracks.data.std.accessors.IntegerBinaryComparatorFactory;
+import org.apache.hyracks.data.std.accessors.LongBinaryComparatorFactory;
 import org.apache.hyracks.data.std.accessors.PointableBinaryComparatorFactory;
 import org.apache.hyracks.data.std.accessors.RawBinaryComparatorFactory;
 import org.apache.hyracks.data.std.primitive.ByteArrayPointable;
-import org.apache.hyracks.data.std.primitive.DoublePointable;
-import org.apache.hyracks.data.std.primitive.FloatPointable;
-import org.apache.hyracks.data.std.primitive.IntegerPointable;
 import org.apache.hyracks.data.std.primitive.UTF8StringLowercasePointable;
 import org.apache.hyracks.data.std.primitive.UTF8StringPointable;
 
@@ -55,17 +57,14 @@ public class ListItemBinaryComparatorFactory implements IBinaryComparatorFactory
             final boolean ignoreCase) {
         return new IBinaryComparator() {
             final IBinaryComparator ascBoolComp = BooleanBinaryComparatorFactory.INSTANCE.createBinaryComparator();
-            final IBinaryComparator ascIntComp =
-                    new PointableBinaryComparatorFactory(IntegerPointable.FACTORY).createBinaryComparator();
+            final IBinaryComparator ascIntComp = IntegerBinaryComparatorFactory.INSTANCE.createBinaryComparator();
             final IBinaryComparator ascLongComp = LongBinaryComparatorFactory.INSTANCE.createBinaryComparator();
             final IBinaryComparator ascStrComp =
                     new PointableBinaryComparatorFactory(UTF8StringPointable.FACTORY).createBinaryComparator();
             final IBinaryComparator ascLowerCaseStrComp =
                     new PointableBinaryComparatorFactory(UTF8StringLowercasePointable.FACTORY).createBinaryComparator();
-            final IBinaryComparator ascFloatComp =
-                    new PointableBinaryComparatorFactory(FloatPointable.FACTORY).createBinaryComparator();
-            final IBinaryComparator ascDoubleComp =
-                    new PointableBinaryComparatorFactory(DoublePointable.FACTORY).createBinaryComparator();
+            final IBinaryComparator ascFloatComp = FloatBinaryComparatorFactory.INSTANCE.createBinaryComparator();
+            final IBinaryComparator ascDoubleComp = DoubleBinaryComparatorFactory.INSTANCE.createBinaryComparator();
             final IBinaryComparator ascRectangleComp =
                     ARectanglePartialBinaryComparatorFactory.INSTANCE.createBinaryComparator();
             final IBinaryComparator ascCircleComp =
diff --git a/asterixdb/asterix-om/src/main/java/org/apache/asterix/dataflow/data/nontagged/comparators/LogicalScalarBinaryComparator.java b/asterixdb/asterix-om/src/main/java/org/apache/asterix/dataflow/data/nontagged/comparators/LogicalScalarBinaryComparator.java
index 61036f9..022fc58 100644
--- a/asterixdb/asterix-om/src/main/java/org/apache/asterix/dataflow/data/nontagged/comparators/LogicalScalarBinaryComparator.java
+++ b/asterixdb/asterix-om/src/main/java/org/apache/asterix/dataflow/data/nontagged/comparators/LogicalScalarBinaryComparator.java
@@ -44,36 +44,17 @@ import org.apache.hyracks.api.dataflow.value.IBinaryComparator;
 import org.apache.hyracks.api.exceptions.HyracksDataException;
 import org.apache.hyracks.data.std.accessors.PointableBinaryComparatorFactory;
 import org.apache.hyracks.data.std.api.IPointable;
+import org.apache.hyracks.data.std.primitive.BooleanPointable;
 import org.apache.hyracks.data.std.primitive.ByteArrayPointable;
 
-public class LogicalScalarBinaryComparator implements ILogicalBinaryComparator {
+public final class LogicalScalarBinaryComparator implements ILogicalBinaryComparator {
 
     private static final EnumSet<ATypeTag> INEQUALITY_UNDEFINED_TYPES =
             EnumSet.of(DURATION, INTERVAL, LINE, POINT, POINT3D, POLYGON, CIRCLE, RECTANGLE);
-
     private final IBinaryComparator strBinaryComp =
             BinaryComparatorFactoryProvider.UTF8STRING_POINTABLE_INSTANCE.createBinaryComparator();
-    private final IBinaryComparator circleBinaryComp =
-            ACirclePartialBinaryComparatorFactory.INSTANCE.createBinaryComparator();
-    private final IBinaryComparator durationBinaryComp =
-            ADurationPartialBinaryComparatorFactory.INSTANCE.createBinaryComparator();
-    private final IBinaryComparator intervalBinaryComp =
-            AIntervalAscPartialBinaryComparatorFactory.INSTANCE.createBinaryComparator();
-    private final IBinaryComparator lineBinaryComparator =
-            ALinePartialBinaryComparatorFactory.INSTANCE.createBinaryComparator();
-    private final IBinaryComparator pointBinaryComparator =
-            APointPartialBinaryComparatorFactory.INSTANCE.createBinaryComparator();
-    private final IBinaryComparator point3DBinaryComparator =
-            APoint3DPartialBinaryComparatorFactory.INSTANCE.createBinaryComparator();
-    private final IBinaryComparator polygonBinaryComparator =
-            APolygonPartialBinaryComparatorFactory.INSTANCE.createBinaryComparator();
-    private final IBinaryComparator rectangleBinaryComparator =
-            ARectanglePartialBinaryComparatorFactory.INSTANCE.createBinaryComparator();
-    private final IBinaryComparator uuidBinaryComparator =
-            AUUIDPartialBinaryComparatorFactory.INSTANCE.createBinaryComparator();
     private final IBinaryComparator byteArrayComparator =
             new PointableBinaryComparatorFactory(ByteArrayPointable.FACTORY).createBinaryComparator();
-
     private final boolean isEquality;
 
     LogicalScalarBinaryComparator(boolean isEquality) {
@@ -112,7 +93,7 @@ public class LogicalScalarBinaryComparator implements ILogicalBinaryComparator {
         int result;
         switch (leftTag) {
             case BOOLEAN:
-                result = Integer.compare(leftBytes[leftStart], rightBytes[rightStart]);
+                result = BooleanPointable.compare(leftBytes, leftStart, leftLen, rightBytes, rightStart, rightLen);
                 break;
             case STRING:
                 result = strBinaryComp.compare(leftBytes, leftStart, leftLen, rightBytes, rightStart, rightLen);
@@ -138,37 +119,43 @@ public class LogicalScalarBinaryComparator implements ILogicalBinaryComparator {
                         ADateTimeSerializerDeserializer.getChronon(rightBytes, rightStart));
                 break;
             case CIRCLE:
-                result = circleBinaryComp.compare(leftBytes, leftStart, leftLen, rightBytes, rightStart, rightLen);
+                result = ACirclePartialBinaryComparatorFactory.compare(leftBytes, leftStart, leftLen, rightBytes,
+                        rightStart, rightLen);
                 break;
             case LINE:
-                result = lineBinaryComparator.compare(leftBytes, leftStart, leftLen, rightBytes, rightStart, rightLen);
+                result = ALinePartialBinaryComparatorFactory.compare(leftBytes, leftStart, leftLen, rightBytes,
+                        rightStart, rightLen);
                 break;
             case POINT:
-                result = pointBinaryComparator.compare(leftBytes, leftStart, leftLen, rightBytes, rightStart, rightLen);
+                result = APointPartialBinaryComparatorFactory.compare(leftBytes, leftStart, leftLen, rightBytes,
+                        rightStart, rightLen);
                 break;
             case POINT3D:
-                result = point3DBinaryComparator.compare(leftBytes, leftStart, leftLen, rightBytes, rightStart,
-                        rightLen);
+                result = APoint3DPartialBinaryComparatorFactory.compare(leftBytes, leftStart, leftLen, rightBytes,
+                        rightStart, rightLen);
                 break;
             case POLYGON:
-                result = polygonBinaryComparator.compare(leftBytes, leftStart, leftLen, rightBytes, rightStart,
-                        rightLen);
+                result = APolygonPartialBinaryComparatorFactory.compare(leftBytes, leftStart, leftLen, rightBytes,
+                        rightStart, rightLen);
                 break;
             case DURATION:
-                result = durationBinaryComp.compare(leftBytes, leftStart, leftLen, rightBytes, rightStart, rightLen);
+                result = ADurationPartialBinaryComparatorFactory.compare(leftBytes, leftStart, leftLen, rightBytes,
+                        rightStart, rightLen);
                 break;
             case INTERVAL:
-                result = intervalBinaryComp.compare(leftBytes, leftStart, leftLen, rightBytes, rightStart, rightLen);
+                result = AIntervalAscPartialBinaryComparatorFactory.compare(leftBytes, leftStart, leftLen, rightBytes,
+                        rightStart, rightLen);
                 break;
             case RECTANGLE:
-                result = rectangleBinaryComparator.compare(leftBytes, leftStart, leftLen, rightBytes, rightStart,
-                        rightLen);
+                result = ARectanglePartialBinaryComparatorFactory.compare(leftBytes, leftStart, leftLen, rightBytes,
+                        rightStart, rightLen);
                 break;
             case BINARY:
                 result = byteArrayComparator.compare(leftBytes, leftStart, leftLen, rightBytes, rightStart, rightLen);
                 break;
             case UUID:
-                result = uuidBinaryComparator.compare(leftBytes, leftStart, leftLen, rightBytes, rightStart, rightLen);
+                result = AUUIDPartialBinaryComparatorFactory.compare(leftBytes, leftStart, leftLen, rightBytes,
+                        rightStart, rightLen);
                 break;
             default:
                 return Result.NULL;
diff --git a/asterixdb/asterix-om/src/main/java/org/apache/asterix/formats/nontagged/BinaryComparatorFactoryProvider.java b/asterixdb/asterix-om/src/main/java/org/apache/asterix/formats/nontagged/BinaryComparatorFactoryProvider.java
index 27588cd..7567e0c 100644
--- a/asterixdb/asterix-om/src/main/java/org/apache/asterix/formats/nontagged/BinaryComparatorFactoryProvider.java
+++ b/asterixdb/asterix-om/src/main/java/org/apache/asterix/formats/nontagged/BinaryComparatorFactoryProvider.java
@@ -32,20 +32,20 @@ import org.apache.asterix.dataflow.data.nontagged.comparators.APointPartialBinar
 import org.apache.asterix.dataflow.data.nontagged.comparators.APolygonPartialBinaryComparatorFactory;
 import org.apache.asterix.dataflow.data.nontagged.comparators.ARectanglePartialBinaryComparatorFactory;
 import org.apache.asterix.dataflow.data.nontagged.comparators.AUUIDPartialBinaryComparatorFactory;
-import org.apache.asterix.dataflow.data.nontagged.comparators.BooleanBinaryComparatorFactory;
 import org.apache.asterix.om.types.ATypeTag;
 import org.apache.asterix.om.types.IAType;
 import org.apache.hyracks.algebricks.data.IBinaryComparatorFactoryProvider;
 import org.apache.hyracks.api.dataflow.value.IBinaryComparatorFactory;
+import org.apache.hyracks.data.std.accessors.BooleanBinaryComparatorFactory;
+import org.apache.hyracks.data.std.accessors.ByteBinaryComparatorFactory;
+import org.apache.hyracks.data.std.accessors.DoubleBinaryComparatorFactory;
+import org.apache.hyracks.data.std.accessors.FloatBinaryComparatorFactory;
+import org.apache.hyracks.data.std.accessors.IntegerBinaryComparatorFactory;
+import org.apache.hyracks.data.std.accessors.LongBinaryComparatorFactory;
 import org.apache.hyracks.data.std.accessors.PointableBinaryComparatorFactory;
 import org.apache.hyracks.data.std.accessors.RawBinaryComparatorFactory;
+import org.apache.hyracks.data.std.accessors.ShortBinaryComparatorFactory;
 import org.apache.hyracks.data.std.primitive.ByteArrayPointable;
-import org.apache.hyracks.data.std.primitive.BytePointable;
-import org.apache.hyracks.data.std.primitive.DoublePointable;
-import org.apache.hyracks.data.std.primitive.FloatPointable;
-import org.apache.hyracks.data.std.primitive.IntegerPointable;
-import org.apache.hyracks.data.std.primitive.LongPointable;
-import org.apache.hyracks.data.std.primitive.ShortPointable;
 import org.apache.hyracks.data.std.primitive.UTF8StringLowercasePointable;
 import org.apache.hyracks.data.std.primitive.UTF8StringLowercaseTokenPointable;
 import org.apache.hyracks.data.std.primitive.UTF8StringPointable;
@@ -54,18 +54,12 @@ public class BinaryComparatorFactoryProvider implements IBinaryComparatorFactory
 
     private static final long serialVersionUID = 1L;
     public static final BinaryComparatorFactoryProvider INSTANCE = new BinaryComparatorFactoryProvider();
-    public static final PointableBinaryComparatorFactory BYTE_POINTABLE_INSTANCE =
-            new PointableBinaryComparatorFactory(BytePointable.FACTORY);
-    public static final PointableBinaryComparatorFactory SHORT_POINTABLE_INSTANCE =
-            new PointableBinaryComparatorFactory(ShortPointable.FACTORY);
-    public static final PointableBinaryComparatorFactory INTEGER_POINTABLE_INSTANCE =
-            new PointableBinaryComparatorFactory(IntegerPointable.FACTORY);
-    public static final PointableBinaryComparatorFactory LONG_POINTABLE_INSTANCE =
-            new PointableBinaryComparatorFactory(LongPointable.FACTORY);
-    public static final PointableBinaryComparatorFactory FLOAT_POINTABLE_INSTANCE =
-            new PointableBinaryComparatorFactory(FloatPointable.FACTORY);
-    public static final PointableBinaryComparatorFactory DOUBLE_POINTABLE_INSTANCE =
-            new PointableBinaryComparatorFactory(DoublePointable.FACTORY);
+    public static final IBinaryComparatorFactory BYTE_POINTABLE_INSTANCE = ByteBinaryComparatorFactory.INSTANCE;
+    public static final IBinaryComparatorFactory SHORT_POINTABLE_INSTANCE = ShortBinaryComparatorFactory.INSTANCE;
+    public static final IBinaryComparatorFactory INTEGER_POINTABLE_INSTANCE = IntegerBinaryComparatorFactory.INSTANCE;
+    public static final IBinaryComparatorFactory LONG_POINTABLE_INSTANCE = LongBinaryComparatorFactory.INSTANCE;
+    public static final IBinaryComparatorFactory FLOAT_POINTABLE_INSTANCE = FloatBinaryComparatorFactory.INSTANCE;
+    public static final IBinaryComparatorFactory DOUBLE_POINTABLE_INSTANCE = DoubleBinaryComparatorFactory.INSTANCE;
     public static final PointableBinaryComparatorFactory UTF8STRING_POINTABLE_INSTANCE =
             new PointableBinaryComparatorFactory(UTF8StringPointable.FACTORY);
     // Equivalent to UTF8STRING_POINTABLE_INSTANCE but all characters are considered lower case to implement
@@ -192,5 +186,4 @@ public class BinaryComparatorFactoryProvider implements IBinaryComparatorFactory
             return AIntervalDescPartialBinaryComparatorFactory.INSTANCE;
         }
     }
-
 }
diff --git a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/common/AbstractAsterixListIterator.java b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/common/AbstractAsterixListIterator.java
index c07aae2..ad37fdd 100644
--- a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/common/AbstractAsterixListIterator.java
+++ b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/common/AbstractAsterixListIterator.java
@@ -42,7 +42,7 @@ public abstract class AbstractAsterixListIterator implements ISequenceIterator {
 
     @Override
     public int compare(ISequenceIterator cmpIter) throws HyracksDataException {
-        return cmp.compare(data, pos, -1, cmpIter.getData(), cmpIter.getPos(), -1);
+        return cmp.compare(data, pos, itemLen, cmpIter.getData(), cmpIter.getPos(), itemLen);
     }
 
     @Override
diff --git a/hyracks-fullstack/algebricks/algebricks-tests/src/test/java/org/apache/hyracks/algebricks/tests/pushruntime/PushRuntimeTest.java b/hyracks-fullstack/algebricks/algebricks-tests/src/test/java/org/apache/hyracks/algebricks/tests/pushruntime/PushRuntimeTest.java
index 8e5c27a..7fd63d1 100644
--- a/hyracks-fullstack/algebricks/algebricks-tests/src/test/java/org/apache/hyracks/algebricks/tests/pushruntime/PushRuntimeTest.java
+++ b/hyracks-fullstack/algebricks/algebricks-tests/src/test/java/org/apache/hyracks/algebricks/tests/pushruntime/PushRuntimeTest.java
@@ -73,8 +73,8 @@ import org.apache.hyracks.api.io.FileSplit;
 import org.apache.hyracks.api.io.ManagedFileSplit;
 import org.apache.hyracks.api.job.JobSpecification;
 import org.apache.hyracks.control.nc.NodeControllerService;
+import org.apache.hyracks.data.std.accessors.IntegerBinaryComparatorFactory;
 import org.apache.hyracks.data.std.accessors.PointableBinaryComparatorFactory;
-import org.apache.hyracks.data.std.primitive.IntegerPointable;
 import org.apache.hyracks.data.std.primitive.UTF8StringPointable;
 import org.apache.hyracks.dataflow.common.data.marshalling.FloatSerializerDeserializer;
 import org.apache.hyracks.dataflow.common.data.marshalling.IntegerSerializerDeserializer;
@@ -425,8 +425,7 @@ public class PushRuntimeTest {
         // the sort (by nation id)
         RecordDescriptor sortDesc = scannerDesc;
         InMemorySortOperatorDescriptor sort = new InMemorySortOperatorDescriptor(spec, new int[] { 3 },
-                new IBinaryComparatorFactory[] { PointableBinaryComparatorFactory.of(IntegerPointable.FACTORY) },
-                sortDesc);
+                new IBinaryComparatorFactory[] { IntegerBinaryComparatorFactory.INSTANCE }, sortDesc);
 
         PartitionConstraintHelper.addAbsoluteLocationConstraint(spec, sort,
                 new String[] { AlgebricksHyracksIntegrationUtil.NC1_ID });
@@ -445,8 +444,7 @@ public class PushRuntimeTest {
         RecordDescriptor gbyDesc = new RecordDescriptor(new ISerializerDeserializer[] {
                 IntegerSerializerDeserializer.INSTANCE, IntegerSerializerDeserializer.INSTANCE });
         PreclusteredGroupOperatorDescriptor gby = new PreclusteredGroupOperatorDescriptor(spec, new int[] { 3 },
-                new IBinaryComparatorFactory[] { PointableBinaryComparatorFactory.of(IntegerPointable.FACTORY) }, npaaf,
-                gbyDesc);
+                new IBinaryComparatorFactory[] { IntegerBinaryComparatorFactory.INSTANCE }, npaaf, gbyDesc);
 
         PartitionConstraintHelper.addAbsoluteLocationConstraint(spec, gby,
                 new String[] { AlgebricksHyracksIntegrationUtil.NC1_ID });
@@ -838,9 +836,9 @@ public class PushRuntimeTest {
 
         // the sort (by nation id)
         RecordDescriptor sortDesc = scannerDesc;
-        InMemorySortRuntimeFactory sort = new InMemorySortRuntimeFactory(new int[] { 3 },
-                (INormalizedKeyComputerFactory) null,
-                new IBinaryComparatorFactory[] { PointableBinaryComparatorFactory.of(IntegerPointable.FACTORY) }, null);
+        InMemorySortRuntimeFactory sort =
+                new InMemorySortRuntimeFactory(new int[] { 3 }, (INormalizedKeyComputerFactory) null,
+                        new IBinaryComparatorFactory[] { IntegerBinaryComparatorFactory.INSTANCE }, null);
 
         // the group-by
         NestedTupleSourceRuntimeFactory nts = new NestedTupleSourceRuntimeFactory();
@@ -855,11 +853,9 @@ public class PushRuntimeTest {
                 new AlgebricksPipeline[] { pipeline }, new int[] { 3 }, new int[] {});
         RecordDescriptor gbyDesc = new RecordDescriptor(new ISerializerDeserializer[] {
                 IntegerSerializerDeserializer.INSTANCE, IntegerSerializerDeserializer.INSTANCE });
-        MicroPreClusteredGroupRuntimeFactory gby =
-                new MicroPreClusteredGroupRuntimeFactory(new int[] { 3 },
-                        new IBinaryComparatorFactory[] {
-                                PointableBinaryComparatorFactory.of(IntegerPointable.FACTORY) },
-                        npaaf, sortDesc, gbyDesc, null);
+        MicroPreClusteredGroupRuntimeFactory gby = new MicroPreClusteredGroupRuntimeFactory(new int[] { 3 },
+                new IBinaryComparatorFactory[] { IntegerBinaryComparatorFactory.INSTANCE }, npaaf, sortDesc, gbyDesc,
+                null);
 
         // the algebricks op.
         IScalarEvaluatorFactory cond =
diff --git a/asterixdb/asterix-om/src/main/java/org/apache/asterix/dataflow/data/nontagged/comparators/BooleanBinaryComparatorFactory.java b/hyracks-fullstack/hyracks/hyracks-data/hyracks-data-std/src/main/java/org/apache/hyracks/data/std/accessors/BooleanBinaryComparatorFactory.java
similarity index 74%
rename from asterixdb/asterix-om/src/main/java/org/apache/asterix/dataflow/data/nontagged/comparators/BooleanBinaryComparatorFactory.java
rename to hyracks-fullstack/hyracks/hyracks-data/hyracks-data-std/src/main/java/org/apache/hyracks/data/std/accessors/BooleanBinaryComparatorFactory.java
index 23e131f..7be81af 100644
--- a/asterixdb/asterix-om/src/main/java/org/apache/asterix/dataflow/data/nontagged/comparators/BooleanBinaryComparatorFactory.java
+++ b/hyracks-fullstack/hyracks/hyracks-data/hyracks-data-std/src/main/java/org/apache/hyracks/data/std/accessors/BooleanBinaryComparatorFactory.java
@@ -16,19 +16,18 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.apache.asterix.dataflow.data.nontagged.comparators;
+package org.apache.hyracks.data.std.accessors;
 
-import org.apache.asterix.dataflow.data.nontagged.serde.ABooleanSerializerDeserializer;
 import org.apache.hyracks.api.dataflow.value.IBinaryComparator;
 import org.apache.hyracks.api.dataflow.value.IBinaryComparatorFactory;
 import org.apache.hyracks.api.exceptions.HyracksDataException;
 import org.apache.hyracks.api.io.IJsonSerializable;
 import org.apache.hyracks.api.io.IPersistedResourceRegistry;
+import org.apache.hyracks.data.std.primitive.BooleanPointable;
 
 import com.fasterxml.jackson.databind.JsonNode;
 
-// TODO(ali): move to Hyracks
-public class BooleanBinaryComparatorFactory implements IBinaryComparatorFactory {
+public final class BooleanBinaryComparatorFactory implements IBinaryComparatorFactory {
 
     private static final long serialVersionUID = 1L;
     public static final BooleanBinaryComparatorFactory INSTANCE = new BooleanBinaryComparatorFactory();
@@ -38,13 +37,7 @@ public class BooleanBinaryComparatorFactory implements IBinaryComparatorFactory
 
     @Override
     public IBinaryComparator createBinaryComparator() {
-        return BooleanBinaryComparatorFactory::compare;
-    }
-
-    @SuppressWarnings("squid:S1172") // unused parameter
-    public static int compare(byte[] b1, int s1, int l1, byte[] b2, int s2, int l2) {
-        return Boolean.compare(ABooleanSerializerDeserializer.getBoolean(b1, s1),
-                ABooleanSerializerDeserializer.getBoolean(b2, s2));
+        return BooleanPointable::compare;
     }
 
     @Override
diff --git a/asterixdb/asterix-om/src/main/java/org/apache/asterix/dataflow/data/nontagged/comparators/LongBinaryComparatorFactory.java b/hyracks-fullstack/hyracks/hyracks-data/hyracks-data-std/src/main/java/org/apache/hyracks/data/std/accessors/ByteBinaryComparatorFactory.java
similarity index 69%
copy from asterixdb/asterix-om/src/main/java/org/apache/asterix/dataflow/data/nontagged/comparators/LongBinaryComparatorFactory.java
copy to hyracks-fullstack/hyracks/hyracks-data/hyracks-data-std/src/main/java/org/apache/hyracks/data/std/accessors/ByteBinaryComparatorFactory.java
index cbab346..7e85932 100644
--- a/asterixdb/asterix-om/src/main/java/org/apache/asterix/dataflow/data/nontagged/comparators/LongBinaryComparatorFactory.java
+++ b/hyracks-fullstack/hyracks/hyracks-data/hyracks-data-std/src/main/java/org/apache/hyracks/data/std/accessors/ByteBinaryComparatorFactory.java
@@ -16,34 +16,28 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.apache.asterix.dataflow.data.nontagged.comparators;
+package org.apache.hyracks.data.std.accessors;
 
-import org.apache.asterix.dataflow.data.nontagged.serde.AInt64SerializerDeserializer;
 import org.apache.hyracks.api.dataflow.value.IBinaryComparator;
 import org.apache.hyracks.api.dataflow.value.IBinaryComparatorFactory;
 import org.apache.hyracks.api.exceptions.HyracksDataException;
 import org.apache.hyracks.api.io.IJsonSerializable;
 import org.apache.hyracks.api.io.IPersistedResourceRegistry;
+import org.apache.hyracks.data.std.primitive.BytePointable;
 
 import com.fasterxml.jackson.databind.JsonNode;
 
-// TODO(ali): move to Hyracks
-public class LongBinaryComparatorFactory implements IBinaryComparatorFactory {
+public final class ByteBinaryComparatorFactory implements IBinaryComparatorFactory {
 
     private static final long serialVersionUID = 1L;
-    public static final LongBinaryComparatorFactory INSTANCE = new LongBinaryComparatorFactory();
+    public static final ByteBinaryComparatorFactory INSTANCE = new ByteBinaryComparatorFactory();
 
-    private LongBinaryComparatorFactory() {
+    private ByteBinaryComparatorFactory() {
     }
 
     @Override
     public IBinaryComparator createBinaryComparator() {
-        return LongBinaryComparatorFactory::compare;
-    }
-
-    @SuppressWarnings("squid:S1172") // unused parameter
-    public static int compare(byte[] b1, int s1, int l1, byte[] b2, int s2, int l2) {
-        return Long.compare(AInt64SerializerDeserializer.getLong(b1, s1), AInt64SerializerDeserializer.getLong(b2, s2));
+        return BytePointable::compare;
     }
 
     @Override
diff --git a/asterixdb/asterix-om/src/main/java/org/apache/asterix/dataflow/data/nontagged/comparators/LongBinaryComparatorFactory.java b/hyracks-fullstack/hyracks/hyracks-data/hyracks-data-std/src/main/java/org/apache/hyracks/data/std/accessors/DoubleBinaryComparatorFactory.java
similarity index 69%
copy from asterixdb/asterix-om/src/main/java/org/apache/asterix/dataflow/data/nontagged/comparators/LongBinaryComparatorFactory.java
copy to hyracks-fullstack/hyracks/hyracks-data/hyracks-data-std/src/main/java/org/apache/hyracks/data/std/accessors/DoubleBinaryComparatorFactory.java
index cbab346..1fa68d2 100644
--- a/asterixdb/asterix-om/src/main/java/org/apache/asterix/dataflow/data/nontagged/comparators/LongBinaryComparatorFactory.java
+++ b/hyracks-fullstack/hyracks/hyracks-data/hyracks-data-std/src/main/java/org/apache/hyracks/data/std/accessors/DoubleBinaryComparatorFactory.java
@@ -16,34 +16,28 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.apache.asterix.dataflow.data.nontagged.comparators;
+package org.apache.hyracks.data.std.accessors;
 
-import org.apache.asterix.dataflow.data.nontagged.serde.AInt64SerializerDeserializer;
 import org.apache.hyracks.api.dataflow.value.IBinaryComparator;
 import org.apache.hyracks.api.dataflow.value.IBinaryComparatorFactory;
 import org.apache.hyracks.api.exceptions.HyracksDataException;
 import org.apache.hyracks.api.io.IJsonSerializable;
 import org.apache.hyracks.api.io.IPersistedResourceRegistry;
+import org.apache.hyracks.data.std.primitive.DoublePointable;
 
 import com.fasterxml.jackson.databind.JsonNode;
 
-// TODO(ali): move to Hyracks
-public class LongBinaryComparatorFactory implements IBinaryComparatorFactory {
+public final class DoubleBinaryComparatorFactory implements IBinaryComparatorFactory {
 
     private static final long serialVersionUID = 1L;
-    public static final LongBinaryComparatorFactory INSTANCE = new LongBinaryComparatorFactory();
+    public static final DoubleBinaryComparatorFactory INSTANCE = new DoubleBinaryComparatorFactory();
 
-    private LongBinaryComparatorFactory() {
+    private DoubleBinaryComparatorFactory() {
     }
 
     @Override
     public IBinaryComparator createBinaryComparator() {
-        return LongBinaryComparatorFactory::compare;
-    }
-
-    @SuppressWarnings("squid:S1172") // unused parameter
-    public static int compare(byte[] b1, int s1, int l1, byte[] b2, int s2, int l2) {
-        return Long.compare(AInt64SerializerDeserializer.getLong(b1, s1), AInt64SerializerDeserializer.getLong(b2, s2));
+        return DoublePointable::compare;
     }
 
     @Override
diff --git a/asterixdb/asterix-om/src/main/java/org/apache/asterix/dataflow/data/nontagged/comparators/LongBinaryComparatorFactory.java b/hyracks-fullstack/hyracks/hyracks-data/hyracks-data-std/src/main/java/org/apache/hyracks/data/std/accessors/FloatBinaryComparatorFactory.java
similarity index 69%
copy from asterixdb/asterix-om/src/main/java/org/apache/asterix/dataflow/data/nontagged/comparators/LongBinaryComparatorFactory.java
copy to hyracks-fullstack/hyracks/hyracks-data/hyracks-data-std/src/main/java/org/apache/hyracks/data/std/accessors/FloatBinaryComparatorFactory.java
index cbab346..3e0dea6 100644
--- a/asterixdb/asterix-om/src/main/java/org/apache/asterix/dataflow/data/nontagged/comparators/LongBinaryComparatorFactory.java
+++ b/hyracks-fullstack/hyracks/hyracks-data/hyracks-data-std/src/main/java/org/apache/hyracks/data/std/accessors/FloatBinaryComparatorFactory.java
@@ -16,34 +16,28 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.apache.asterix.dataflow.data.nontagged.comparators;
+package org.apache.hyracks.data.std.accessors;
 
-import org.apache.asterix.dataflow.data.nontagged.serde.AInt64SerializerDeserializer;
 import org.apache.hyracks.api.dataflow.value.IBinaryComparator;
 import org.apache.hyracks.api.dataflow.value.IBinaryComparatorFactory;
 import org.apache.hyracks.api.exceptions.HyracksDataException;
 import org.apache.hyracks.api.io.IJsonSerializable;
 import org.apache.hyracks.api.io.IPersistedResourceRegistry;
+import org.apache.hyracks.data.std.primitive.FloatPointable;
 
 import com.fasterxml.jackson.databind.JsonNode;
 
-// TODO(ali): move to Hyracks
-public class LongBinaryComparatorFactory implements IBinaryComparatorFactory {
+public final class FloatBinaryComparatorFactory implements IBinaryComparatorFactory {
 
     private static final long serialVersionUID = 1L;
-    public static final LongBinaryComparatorFactory INSTANCE = new LongBinaryComparatorFactory();
+    public static final FloatBinaryComparatorFactory INSTANCE = new FloatBinaryComparatorFactory();
 
-    private LongBinaryComparatorFactory() {
+    private FloatBinaryComparatorFactory() {
     }
 
     @Override
     public IBinaryComparator createBinaryComparator() {
-        return LongBinaryComparatorFactory::compare;
-    }
-
-    @SuppressWarnings("squid:S1172") // unused parameter
-    public static int compare(byte[] b1, int s1, int l1, byte[] b2, int s2, int l2) {
-        return Long.compare(AInt64SerializerDeserializer.getLong(b1, s1), AInt64SerializerDeserializer.getLong(b2, s2));
+        return FloatPointable::compare;
     }
 
     @Override
diff --git a/asterixdb/asterix-om/src/main/java/org/apache/asterix/dataflow/data/nontagged/comparators/LongBinaryComparatorFactory.java b/hyracks-fullstack/hyracks/hyracks-data/hyracks-data-std/src/main/java/org/apache/hyracks/data/std/accessors/IntegerBinaryComparatorFactory.java
similarity index 69%
copy from asterixdb/asterix-om/src/main/java/org/apache/asterix/dataflow/data/nontagged/comparators/LongBinaryComparatorFactory.java
copy to hyracks-fullstack/hyracks/hyracks-data/hyracks-data-std/src/main/java/org/apache/hyracks/data/std/accessors/IntegerBinaryComparatorFactory.java
index cbab346..deb8b16 100644
--- a/asterixdb/asterix-om/src/main/java/org/apache/asterix/dataflow/data/nontagged/comparators/LongBinaryComparatorFactory.java
+++ b/hyracks-fullstack/hyracks/hyracks-data/hyracks-data-std/src/main/java/org/apache/hyracks/data/std/accessors/IntegerBinaryComparatorFactory.java
@@ -16,34 +16,28 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.apache.asterix.dataflow.data.nontagged.comparators;
+package org.apache.hyracks.data.std.accessors;
 
-import org.apache.asterix.dataflow.data.nontagged.serde.AInt64SerializerDeserializer;
 import org.apache.hyracks.api.dataflow.value.IBinaryComparator;
 import org.apache.hyracks.api.dataflow.value.IBinaryComparatorFactory;
 import org.apache.hyracks.api.exceptions.HyracksDataException;
 import org.apache.hyracks.api.io.IJsonSerializable;
 import org.apache.hyracks.api.io.IPersistedResourceRegistry;
+import org.apache.hyracks.data.std.primitive.IntegerPointable;
 
 import com.fasterxml.jackson.databind.JsonNode;
 
-// TODO(ali): move to Hyracks
-public class LongBinaryComparatorFactory implements IBinaryComparatorFactory {
+public final class IntegerBinaryComparatorFactory implements IBinaryComparatorFactory {
 
     private static final long serialVersionUID = 1L;
-    public static final LongBinaryComparatorFactory INSTANCE = new LongBinaryComparatorFactory();
+    public static final IntegerBinaryComparatorFactory INSTANCE = new IntegerBinaryComparatorFactory();
 
-    private LongBinaryComparatorFactory() {
+    private IntegerBinaryComparatorFactory() {
     }
 
     @Override
     public IBinaryComparator createBinaryComparator() {
-        return LongBinaryComparatorFactory::compare;
-    }
-
-    @SuppressWarnings("squid:S1172") // unused parameter
-    public static int compare(byte[] b1, int s1, int l1, byte[] b2, int s2, int l2) {
-        return Long.compare(AInt64SerializerDeserializer.getLong(b1, s1), AInt64SerializerDeserializer.getLong(b2, s2));
+        return IntegerPointable::compare;
     }
 
     @Override
diff --git a/asterixdb/asterix-om/src/main/java/org/apache/asterix/dataflow/data/nontagged/comparators/LongBinaryComparatorFactory.java b/hyracks-fullstack/hyracks/hyracks-data/hyracks-data-std/src/main/java/org/apache/hyracks/data/std/accessors/LongBinaryComparatorFactory.java
similarity index 75%
copy from asterixdb/asterix-om/src/main/java/org/apache/asterix/dataflow/data/nontagged/comparators/LongBinaryComparatorFactory.java
copy to hyracks-fullstack/hyracks/hyracks-data/hyracks-data-std/src/main/java/org/apache/hyracks/data/std/accessors/LongBinaryComparatorFactory.java
index cbab346..51d6c55 100644
--- a/asterixdb/asterix-om/src/main/java/org/apache/asterix/dataflow/data/nontagged/comparators/LongBinaryComparatorFactory.java
+++ b/hyracks-fullstack/hyracks/hyracks-data/hyracks-data-std/src/main/java/org/apache/hyracks/data/std/accessors/LongBinaryComparatorFactory.java
@@ -16,19 +16,18 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.apache.asterix.dataflow.data.nontagged.comparators;
+package org.apache.hyracks.data.std.accessors;
 
-import org.apache.asterix.dataflow.data.nontagged.serde.AInt64SerializerDeserializer;
 import org.apache.hyracks.api.dataflow.value.IBinaryComparator;
 import org.apache.hyracks.api.dataflow.value.IBinaryComparatorFactory;
 import org.apache.hyracks.api.exceptions.HyracksDataException;
 import org.apache.hyracks.api.io.IJsonSerializable;
 import org.apache.hyracks.api.io.IPersistedResourceRegistry;
+import org.apache.hyracks.data.std.primitive.LongPointable;
 
 import com.fasterxml.jackson.databind.JsonNode;
 
-// TODO(ali): move to Hyracks
-public class LongBinaryComparatorFactory implements IBinaryComparatorFactory {
+public final class LongBinaryComparatorFactory implements IBinaryComparatorFactory {
 
     private static final long serialVersionUID = 1L;
     public static final LongBinaryComparatorFactory INSTANCE = new LongBinaryComparatorFactory();
@@ -38,12 +37,7 @@ public class LongBinaryComparatorFactory implements IBinaryComparatorFactory {
 
     @Override
     public IBinaryComparator createBinaryComparator() {
-        return LongBinaryComparatorFactory::compare;
-    }
-
-    @SuppressWarnings("squid:S1172") // unused parameter
-    public static int compare(byte[] b1, int s1, int l1, byte[] b2, int s2, int l2) {
-        return Long.compare(AInt64SerializerDeserializer.getLong(b1, s1), AInt64SerializerDeserializer.getLong(b2, s2));
+        return LongPointable::compare;
     }
 
     @Override
diff --git a/hyracks-fullstack/hyracks/hyracks-data/hyracks-data-std/src/main/java/org/apache/hyracks/data/std/accessors/PointableBinaryComparatorFactory.java b/hyracks-fullstack/hyracks/hyracks-data/hyracks-data-std/src/main/java/org/apache/hyracks/data/std/accessors/PointableBinaryComparatorFactory.java
index ff9758c..25be6a6 100644
--- a/hyracks-fullstack/hyracks/hyracks-data/hyracks-data-std/src/main/java/org/apache/hyracks/data/std/accessors/PointableBinaryComparatorFactory.java
+++ b/hyracks-fullstack/hyracks/hyracks-data/hyracks-data-std/src/main/java/org/apache/hyracks/data/std/accessors/PointableBinaryComparatorFactory.java
@@ -49,10 +49,6 @@ public class PointableBinaryComparatorFactory implements IBinaryComparatorFactor
         return new IBinaryComparator() {
             @Override
             public int compare(byte[] b1, int s1, int l1, byte[] b2, int s2, int l2) {
-                if (l1 == 0 && l2 != 0)
-                    return -1;
-                if (l1 != 0 && l2 == 0)
-                    return 1;
                 p.set(b1, s1, l1);
                 return ((IComparable) p).compareTo(b2, s2, l2);
             }
diff --git a/asterixdb/asterix-om/src/main/java/org/apache/asterix/dataflow/data/nontagged/comparators/LongBinaryComparatorFactory.java b/hyracks-fullstack/hyracks/hyracks-data/hyracks-data-std/src/main/java/org/apache/hyracks/data/std/accessors/ShortBinaryComparatorFactory.java
similarity index 69%
rename from asterixdb/asterix-om/src/main/java/org/apache/asterix/dataflow/data/nontagged/comparators/LongBinaryComparatorFactory.java
rename to hyracks-fullstack/hyracks/hyracks-data/hyracks-data-std/src/main/java/org/apache/hyracks/data/std/accessors/ShortBinaryComparatorFactory.java
index cbab346..224e1ee 100644
--- a/asterixdb/asterix-om/src/main/java/org/apache/asterix/dataflow/data/nontagged/comparators/LongBinaryComparatorFactory.java
+++ b/hyracks-fullstack/hyracks/hyracks-data/hyracks-data-std/src/main/java/org/apache/hyracks/data/std/accessors/ShortBinaryComparatorFactory.java
@@ -16,34 +16,28 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.apache.asterix.dataflow.data.nontagged.comparators;
+package org.apache.hyracks.data.std.accessors;
 
-import org.apache.asterix.dataflow.data.nontagged.serde.AInt64SerializerDeserializer;
 import org.apache.hyracks.api.dataflow.value.IBinaryComparator;
 import org.apache.hyracks.api.dataflow.value.IBinaryComparatorFactory;
 import org.apache.hyracks.api.exceptions.HyracksDataException;
 import org.apache.hyracks.api.io.IJsonSerializable;
 import org.apache.hyracks.api.io.IPersistedResourceRegistry;
+import org.apache.hyracks.data.std.primitive.ShortPointable;
 
 import com.fasterxml.jackson.databind.JsonNode;
 
-// TODO(ali): move to Hyracks
-public class LongBinaryComparatorFactory implements IBinaryComparatorFactory {
+public final class ShortBinaryComparatorFactory implements IBinaryComparatorFactory {
 
     private static final long serialVersionUID = 1L;
-    public static final LongBinaryComparatorFactory INSTANCE = new LongBinaryComparatorFactory();
+    public static final ShortBinaryComparatorFactory INSTANCE = new ShortBinaryComparatorFactory();
 
-    private LongBinaryComparatorFactory() {
+    private ShortBinaryComparatorFactory() {
     }
 
     @Override
     public IBinaryComparator createBinaryComparator() {
-        return LongBinaryComparatorFactory::compare;
-    }
-
-    @SuppressWarnings("squid:S1172") // unused parameter
-    public static int compare(byte[] b1, int s1, int l1, byte[] b2, int s2, int l2) {
-        return Long.compare(AInt64SerializerDeserializer.getLong(b1, s1), AInt64SerializerDeserializer.getLong(b2, s2));
+        return ShortPointable::compare;
     }
 
     @Override
diff --git a/hyracks-fullstack/hyracks/hyracks-data/hyracks-data-std/src/main/java/org/apache/hyracks/data/std/primitive/BooleanPointable.java b/hyracks-fullstack/hyracks/hyracks-data/hyracks-data-std/src/main/java/org/apache/hyracks/data/std/primitive/BooleanPointable.java
index ca26ef8..3b122f8 100644
--- a/hyracks-fullstack/hyracks/hyracks-data/hyracks-data-std/src/main/java/org/apache/hyracks/data/std/primitive/BooleanPointable.java
+++ b/hyracks-fullstack/hyracks/hyracks-data/hyracks-data-std/src/main/java/org/apache/hyracks/data/std/primitive/BooleanPointable.java
@@ -27,13 +27,15 @@ import org.apache.hyracks.data.std.api.IComparable;
 import org.apache.hyracks.data.std.api.IHashable;
 import org.apache.hyracks.data.std.api.IPointable;
 import org.apache.hyracks.data.std.api.IPointableFactory;
+import org.apache.hyracks.data.std.util.DataUtils;
 
 import com.fasterxml.jackson.databind.JsonNode;
 
 public final class BooleanPointable extends AbstractPointable implements IHashable, IComparable {
 
+    private static final int LENGTH = 1;
     public static final BooleanPointableFactory FACTORY = new BooleanPointableFactory();
-    public static final ITypeTraits TYPE_TRAITS = new FixedLengthTypeTrait(1);
+    public static final FixedLengthTypeTrait TYPE_TRAITS = new FixedLengthTypeTrait(LENGTH);
 
     public static class BooleanPointableFactory implements IPointableFactory {
         private static final long serialVersionUID = 1L;
@@ -93,9 +95,12 @@ public final class BooleanPointable extends AbstractPointable implements IHashab
 
     @Override
     public int compareTo(byte[] bytes, int start, int length) {
-        boolean b = getBoolean();
-        boolean ob = getBoolean(bytes, start);
-        return b == ob ? 0 : (b ? 1 : -1);
+        return compare(this.bytes, this.start, this.length, bytes, start, length);
+    }
+
+    public static int compare(byte[] b1, int s1, int l1, byte[] b2, int s2, int l2) {
+        DataUtils.ensureLengths(LENGTH, l1, l2);
+        return Boolean.compare(getBoolean(b1, s1), getBoolean(b2, s2));
     }
 
     @Override
diff --git a/hyracks-fullstack/hyracks/hyracks-data/hyracks-data-std/src/main/java/org/apache/hyracks/data/std/primitive/BytePointable.java b/hyracks-fullstack/hyracks/hyracks-data/hyracks-data-std/src/main/java/org/apache/hyracks/data/std/primitive/BytePointable.java
index a8195ac..41e7c82 100644
--- a/hyracks-fullstack/hyracks/hyracks-data/hyracks-data-std/src/main/java/org/apache/hyracks/data/std/primitive/BytePointable.java
+++ b/hyracks-fullstack/hyracks/hyracks-data/hyracks-data-std/src/main/java/org/apache/hyracks/data/std/primitive/BytePointable.java
@@ -28,13 +28,15 @@ import org.apache.hyracks.data.std.api.IHashable;
 import org.apache.hyracks.data.std.api.INumeric;
 import org.apache.hyracks.data.std.api.IPointable;
 import org.apache.hyracks.data.std.api.IPointableFactory;
+import org.apache.hyracks.data.std.util.DataUtils;
 
 import com.fasterxml.jackson.databind.JsonNode;
 
 public final class BytePointable extends AbstractPointable implements IHashable, IComparable, INumeric {
 
+    private static final int LENGTH = 1;
     public static final BytePointableFactory FACTORY = new BytePointableFactory();
-    public static final ITypeTraits TYPE_TRAITS = new FixedLengthTypeTrait(1);
+    public static final ITypeTraits TYPE_TRAITS = new FixedLengthTypeTrait(LENGTH);
 
     public static final class BytePointableFactory implements IPointableFactory {
         private static final long serialVersionUID = 1L;
@@ -64,7 +66,7 @@ public final class BytePointable extends AbstractPointable implements IHashable,
         return bytes[start];
     }
 
-    public static void setByte(byte[] bytes, int start, byte value) {
+    private static void setByte(byte[] bytes, int start, byte value) {
         bytes[start] = value;
     }
 
@@ -76,20 +78,6 @@ public final class BytePointable extends AbstractPointable implements IHashable,
         setByte(bytes, start, value);
     }
 
-    public byte preIncrement() {
-        byte v = getByte();
-        ++v;
-        setByte(v);
-        return v;
-    }
-
-    public byte postIncrement() {
-        byte v = getByte();
-        byte ov = v++;
-        setByte(v);
-        return ov;
-    }
-
     @Override
     public int compareTo(IPointable pointer) {
         return compareTo(pointer.getByteArray(), pointer.getStartOffset(), pointer.getLength());
@@ -97,9 +85,12 @@ public final class BytePointable extends AbstractPointable implements IHashable,
 
     @Override
     public int compareTo(byte[] bytes, int start, int length) {
-        byte b = getByte();
-        byte ob = getByte(bytes, start);
-        return Byte.compare(b, ob);
+        return compare(this.bytes, this.start, this.length, bytes, start, length);
+    }
+
+    public static int compare(byte[] b1, int s1, int l1, byte[] b2, int s2, int l2) {
+        DataUtils.ensureLengths(LENGTH, l1, l2);
+        return Byte.compare(getByte(b1, s1), getByte(b2, s2));
     }
 
     @Override
diff --git a/hyracks-fullstack/hyracks/hyracks-data/hyracks-data-std/src/main/java/org/apache/hyracks/data/std/primitive/DoublePointable.java b/hyracks-fullstack/hyracks/hyracks-data/hyracks-data-std/src/main/java/org/apache/hyracks/data/std/primitive/DoublePointable.java
index cde797e..ee31f30 100644
--- a/hyracks-fullstack/hyracks/hyracks-data/hyracks-data-std/src/main/java/org/apache/hyracks/data/std/primitive/DoublePointable.java
+++ b/hyracks-fullstack/hyracks/hyracks-data/hyracks-data-std/src/main/java/org/apache/hyracks/data/std/primitive/DoublePointable.java
@@ -28,13 +28,15 @@ import org.apache.hyracks.data.std.api.IHashable;
 import org.apache.hyracks.data.std.api.INumeric;
 import org.apache.hyracks.data.std.api.IPointable;
 import org.apache.hyracks.data.std.api.IPointableFactory;
+import org.apache.hyracks.data.std.util.DataUtils;
 
 import com.fasterxml.jackson.databind.JsonNode;
 
 public final class DoublePointable extends AbstractPointable implements IHashable, IComparable, INumeric {
 
+    private static final int LENGTH = 8;
     public static final DoublePointableFactory FACTORY = new DoublePointableFactory();
-    public static final ITypeTraits TYPE_TRAITS = new FixedLengthTypeTrait(8) {
+    public static final ITypeTraits TYPE_TRAITS = new FixedLengthTypeTrait(LENGTH) {
         private static final long serialVersionUID = 7348262203696059687L;
 
         //TODO fix RTREE logic based on class comparision in LSMRTreeUtils#proposeBestLinearizer
@@ -99,20 +101,6 @@ public final class DoublePointable extends AbstractPointable implements IHashabl
         setDouble(bytes, start, value);
     }
 
-    public double preIncrement() {
-        double v = getDouble();
-        ++v;
-        setDouble(v);
-        return v;
-    }
-
-    public double postIncrement() {
-        double v = getDouble();
-        double ov = v++;
-        setDouble(v);
-        return ov;
-    }
-
     @Override
     public int compareTo(IPointable pointer) {
         return compareTo(pointer.getByteArray(), pointer.getStartOffset(), pointer.getLength());
@@ -120,9 +108,12 @@ public final class DoublePointable extends AbstractPointable implements IHashabl
 
     @Override
     public int compareTo(byte[] bytes, int start, int length) {
-        double v = getDouble();
-        double ov = getDouble(bytes, start);
-        return Double.compare(v, ov);
+        return compare(this.bytes, this.start, this.length, bytes, start, length);
+    }
+
+    public static int compare(byte[] b1, int s1, int l1, byte[] b2, int s2, int l2) {
+        DataUtils.ensureLengths(LENGTH, l1, l2);
+        return Double.compare(getDouble(b1, s1), getDouble(b2, s2));
     }
 
     @Override
diff --git a/hyracks-fullstack/hyracks/hyracks-data/hyracks-data-std/src/main/java/org/apache/hyracks/data/std/primitive/FloatPointable.java b/hyracks-fullstack/hyracks/hyracks-data/hyracks-data-std/src/main/java/org/apache/hyracks/data/std/primitive/FloatPointable.java
index a55a398..0e330e7 100644
--- a/hyracks-fullstack/hyracks/hyracks-data/hyracks-data-std/src/main/java/org/apache/hyracks/data/std/primitive/FloatPointable.java
+++ b/hyracks-fullstack/hyracks/hyracks-data/hyracks-data-std/src/main/java/org/apache/hyracks/data/std/primitive/FloatPointable.java
@@ -28,12 +28,14 @@ import org.apache.hyracks.data.std.api.IHashable;
 import org.apache.hyracks.data.std.api.INumeric;
 import org.apache.hyracks.data.std.api.IPointable;
 import org.apache.hyracks.data.std.api.IPointableFactory;
+import org.apache.hyracks.data.std.util.DataUtils;
 
 import com.fasterxml.jackson.databind.JsonNode;
 
 public final class FloatPointable extends AbstractPointable implements IHashable, IComparable, INumeric {
 
-    public static final ITypeTraits TYPE_TRAITS = new FixedLengthTypeTrait(4);
+    private static final int LENGTH = 4;
+    public static final ITypeTraits TYPE_TRAITS = new FixedLengthTypeTrait(LENGTH);
     public static final FloatPointableFactory FACTORY = new FloatPointableFactory();
 
     public static final class FloatPointableFactory implements IPointableFactory {
@@ -82,20 +84,6 @@ public final class FloatPointable extends AbstractPointable implements IHashable
         setFloat(bytes, start, value);
     }
 
-    public float preIncrement() {
-        float v = getFloat();
-        ++v;
-        setFloat(v);
-        return v;
-    }
-
-    public float postIncrement() {
-        float v = getFloat();
-        float ov = v++;
-        setFloat(v);
-        return ov;
-    }
-
     @Override
     public int compareTo(IPointable pointer) {
         return compareTo(pointer.getByteArray(), pointer.getStartOffset(), pointer.getLength());
@@ -103,9 +91,12 @@ public final class FloatPointable extends AbstractPointable implements IHashable
 
     @Override
     public int compareTo(byte[] bytes, int start, int length) {
-        float v = getFloat();
-        float ov = getFloat(bytes, start);
-        return Float.compare(v, ov);
+        return compare(this.bytes, this.start, this.length, bytes, start, length);
+    }
+
+    public static int compare(byte[] b1, int s1, int l1, byte[] b2, int s2, int l2) {
+        DataUtils.ensureLengths(LENGTH, l1, l2);
+        return Float.compare(getFloat(b1, s1), getFloat(b2, s2));
     }
 
     @Override
diff --git a/hyracks-fullstack/hyracks/hyracks-data/hyracks-data-std/src/main/java/org/apache/hyracks/data/std/primitive/IntegerPointable.java b/hyracks-fullstack/hyracks/hyracks-data/hyracks-data-std/src/main/java/org/apache/hyracks/data/std/primitive/IntegerPointable.java
index f35c289..453c568 100644
--- a/hyracks-fullstack/hyracks/hyracks-data/hyracks-data-std/src/main/java/org/apache/hyracks/data/std/primitive/IntegerPointable.java
+++ b/hyracks-fullstack/hyracks/hyracks-data/hyracks-data-std/src/main/java/org/apache/hyracks/data/std/primitive/IntegerPointable.java
@@ -28,13 +28,15 @@ import org.apache.hyracks.data.std.api.IHashable;
 import org.apache.hyracks.data.std.api.INumeric;
 import org.apache.hyracks.data.std.api.IPointable;
 import org.apache.hyracks.data.std.api.IPointableFactory;
+import org.apache.hyracks.data.std.util.DataUtils;
 
 import com.fasterxml.jackson.databind.JsonNode;
 
 public final class IntegerPointable extends AbstractPointable implements IHashable, IComparable, INumeric {
 
+    private static final int LENGTH = 4;
     public static final IntegerPointableFactory FACTORY = new IntegerPointableFactory();
-    public static final ITypeTraits TYPE_TRAITS = new FixedLengthTypeTrait(4) {
+    public static final ITypeTraits TYPE_TRAITS = new FixedLengthTypeTrait(LENGTH) {
         private static final long serialVersionUID = -7178318032449879790L;
 
         //TODO fix RTREE logic based on class comparision in LSMRTreeUtils#proposeBestLinearizer
@@ -88,20 +90,6 @@ public final class IntegerPointable extends AbstractPointable implements IHashab
         setInteger(bytes, start, value);
     }
 
-    public int preIncrement() {
-        int v = getInteger();
-        ++v;
-        setInteger(v);
-        return v;
-    }
-
-    public int postIncrement() {
-        int v = getInteger();
-        int ov = v++;
-        setInteger(v);
-        return ov;
-    }
-
     @Override
     public int compareTo(IPointable pointer) {
         return compareTo(pointer.getByteArray(), pointer.getStartOffset(), pointer.getLength());
@@ -109,9 +97,12 @@ public final class IntegerPointable extends AbstractPointable implements IHashab
 
     @Override
     public int compareTo(byte[] bytes, int start, int length) {
-        int v = getInteger();
-        int ov = getInteger(bytes, start);
-        return Integer.compare(v, ov);
+        return compare(this.bytes, this.start, this.length, bytes, start, length);
+    }
+
+    public static int compare(byte[] b1, int s1, int l1, byte[] b2, int s2, int l2) {
+        DataUtils.ensureLengths(LENGTH, l1, l2);
+        return Integer.compare(getInteger(b1, s1), getInteger(b2, s2));
     }
 
     @Override
diff --git a/hyracks-fullstack/hyracks/hyracks-data/hyracks-data-std/src/main/java/org/apache/hyracks/data/std/primitive/LongPointable.java b/hyracks-fullstack/hyracks/hyracks-data/hyracks-data-std/src/main/java/org/apache/hyracks/data/std/primitive/LongPointable.java
index 1c2171c..5929171 100644
--- a/hyracks-fullstack/hyracks/hyracks-data/hyracks-data-std/src/main/java/org/apache/hyracks/data/std/primitive/LongPointable.java
+++ b/hyracks-fullstack/hyracks/hyracks-data/hyracks-data-std/src/main/java/org/apache/hyracks/data/std/primitive/LongPointable.java
@@ -28,13 +28,15 @@ import org.apache.hyracks.data.std.api.IHashable;
 import org.apache.hyracks.data.std.api.INumeric;
 import org.apache.hyracks.data.std.api.IPointable;
 import org.apache.hyracks.data.std.api.IPointableFactory;
+import org.apache.hyracks.data.std.util.DataUtils;
 
 import com.fasterxml.jackson.databind.JsonNode;
 
 public final class LongPointable extends AbstractPointable implements IHashable, IComparable, INumeric {
 
+    private static final int LENGTH = 8;
     public static final LongPointableFactory FACTORY = new LongPointableFactory();
-    public static final ITypeTraits TYPE_TRAITS = new FixedLengthTypeTrait(8);
+    public static final ITypeTraits TYPE_TRAITS = new FixedLengthTypeTrait(LENGTH);
 
     public static class LongPointableFactory implements IPointableFactory {
         private static final long serialVersionUID = 1L;
@@ -100,20 +102,6 @@ public final class LongPointable extends AbstractPointable implements IHashable,
         setLong(bytes, start, value);
     }
 
-    public long preIncrement() {
-        long v = getLong();
-        ++v;
-        setLong(v);
-        return v;
-    }
-
-    public long postIncrement() {
-        long v = getLong();
-        long ov = v++;
-        setLong(v);
-        return ov;
-    }
-
     @Override
     public int compareTo(IPointable pointer) {
         return compareTo(pointer.getByteArray(), pointer.getStartOffset(), pointer.getLength());
@@ -121,9 +109,12 @@ public final class LongPointable extends AbstractPointable implements IHashable,
 
     @Override
     public int compareTo(byte[] bytes, int start, int length) {
-        long v = getLong();
-        long ov = getLong(bytes, start);
-        return Long.compare(v, ov);
+        return compare(this.bytes, this.start, this.length, bytes, start, length);
+    }
+
+    public static int compare(byte[] b1, int s1, int l1, byte[] b2, int s2, int l2) {
+        DataUtils.ensureLengths(LENGTH, l1, l2);
+        return Long.compare(getLong(b1, s1), getLong(b2, s2));
     }
 
     @Override
diff --git a/hyracks-fullstack/hyracks/hyracks-data/hyracks-data-std/src/main/java/org/apache/hyracks/data/std/primitive/ShortPointable.java b/hyracks-fullstack/hyracks/hyracks-data/hyracks-data-std/src/main/java/org/apache/hyracks/data/std/primitive/ShortPointable.java
index 73f3779..48599e9 100644
--- a/hyracks-fullstack/hyracks/hyracks-data/hyracks-data-std/src/main/java/org/apache/hyracks/data/std/primitive/ShortPointable.java
+++ b/hyracks-fullstack/hyracks/hyracks-data/hyracks-data-std/src/main/java/org/apache/hyracks/data/std/primitive/ShortPointable.java
@@ -28,12 +28,14 @@ import org.apache.hyracks.data.std.api.IHashable;
 import org.apache.hyracks.data.std.api.INumeric;
 import org.apache.hyracks.data.std.api.IPointable;
 import org.apache.hyracks.data.std.api.IPointableFactory;
+import org.apache.hyracks.data.std.util.DataUtils;
 
 import com.fasterxml.jackson.databind.JsonNode;
 
 public final class ShortPointable extends AbstractPointable implements IHashable, IComparable, INumeric {
 
-    public static final ITypeTraits TYPE_TRAITS = new FixedLengthTypeTrait(2);
+    private static final int LENGTH = 2;
+    public static final ITypeTraits TYPE_TRAITS = new FixedLengthTypeTrait(LENGTH);
     public static final IPointableFactory FACTORY = new ShortPointableFactory();
 
     public static final class ShortPointableFactory implements IPointableFactory {
@@ -77,20 +79,6 @@ public final class ShortPointable extends AbstractPointable implements IHashable
         setShort(bytes, start, value);
     }
 
-    public short preIncrement() {
-        short v = getShort();
-        ++v;
-        setShort(v);
-        return v;
-    }
-
-    public short postIncrement() {
-        short v = getShort();
-        short ov = v++;
-        setShort(v);
-        return ov;
-    }
-
     @Override
     public int compareTo(IPointable pointer) {
         return compareTo(pointer.getByteArray(), pointer.getStartOffset(), pointer.getLength());
@@ -98,9 +86,12 @@ public final class ShortPointable extends AbstractPointable implements IHashable
 
     @Override
     public int compareTo(byte[] bytes, int start, int length) {
-        short v = getShort();
-        short ov = getShort(bytes, start);
-        return Short.compare(v, ov);
+        return compare(this.bytes, this.start, this.length, bytes, start, length);
+    }
+
+    public static int compare(byte[] b1, int s1, int l1, byte[] b2, int s2, int l2) {
+        DataUtils.ensureLengths(LENGTH, l1, l2);
+        return Short.compare(getShort(b1, s1), getShort(b2, s2));
     }
 
     @Override
diff --git a/hyracks-fullstack/hyracks/hyracks-data/hyracks-data-std/src/main/java/org/apache/hyracks/data/std/util/DataUtils.java b/hyracks-fullstack/hyracks/hyracks-data/hyracks-data-std/src/main/java/org/apache/hyracks/data/std/util/DataUtils.java
index 4993527..6b46792 100644
--- a/hyracks-fullstack/hyracks/hyracks-data/hyracks-data-std/src/main/java/org/apache/hyracks/data/std/util/DataUtils.java
+++ b/hyracks-fullstack/hyracks/hyracks-data/hyracks-data-std/src/main/java/org/apache/hyracks/data/std/util/DataUtils.java
@@ -115,4 +115,10 @@ public class DataUtils {
         return cmp.compare(first.getByteArray(), first.getStartOffset(), first.getLength(), second.getByteArray(),
                 second.getStartOffset(), second.getLength());
     }
+
+    public static void ensureLengths(int requiredLength, int length1, int length2) {
+        if (length1 != requiredLength || length2 != requiredLength) {
+            throw new IllegalStateException();
+        }
+    }
 }
diff --git a/hyracks-fullstack/hyracks/hyracks-dataflow-common/src/main/java/org/apache/hyracks/dataflow/common/utils/SerdeUtils.java b/hyracks-fullstack/hyracks/hyracks-dataflow-common/src/main/java/org/apache/hyracks/dataflow/common/utils/SerdeUtils.java
index ca3f021..2f200c0 100644
--- a/hyracks-fullstack/hyracks/hyracks-dataflow-common/src/main/java/org/apache/hyracks/dataflow/common/utils/SerdeUtils.java
+++ b/hyracks-fullstack/hyracks/hyracks-dataflow-common/src/main/java/org/apache/hyracks/dataflow/common/utils/SerdeUtils.java
@@ -23,7 +23,12 @@ import org.apache.hyracks.api.dataflow.value.IBinaryComparator;
 import org.apache.hyracks.api.dataflow.value.IBinaryComparatorFactory;
 import org.apache.hyracks.api.dataflow.value.ISerializerDeserializer;
 import org.apache.hyracks.api.dataflow.value.ITypeTraits;
+import org.apache.hyracks.data.std.accessors.DoubleBinaryComparatorFactory;
+import org.apache.hyracks.data.std.accessors.FloatBinaryComparatorFactory;
+import org.apache.hyracks.data.std.accessors.IntegerBinaryComparatorFactory;
+import org.apache.hyracks.data.std.accessors.LongBinaryComparatorFactory;
 import org.apache.hyracks.data.std.accessors.PointableBinaryComparatorFactory;
+import org.apache.hyracks.data.std.accessors.ShortBinaryComparatorFactory;
 import org.apache.hyracks.data.std.primitive.BooleanPointable;
 import org.apache.hyracks.data.std.primitive.DoublePointable;
 import org.apache.hyracks.data.std.primitive.FixedLengthTypeTrait;
@@ -106,21 +111,22 @@ public class SerdeUtils {
 
     public static IBinaryComparatorFactory serdeToComparatorFactory(ISerializerDeserializer serde) {
         if (serde instanceof ShortSerializerDeserializer) {
-            return PointableBinaryComparatorFactory.of(ShortPointable.FACTORY);
+            return ShortBinaryComparatorFactory.INSTANCE;
         }
         if (serde instanceof IntegerSerializerDeserializer) {
-            return PointableBinaryComparatorFactory.of(IntegerPointable.FACTORY);
+            return IntegerBinaryComparatorFactory.INSTANCE;
         }
         if (serde instanceof Integer64SerializerDeserializer) {
-            return PointableBinaryComparatorFactory.of(LongPointable.FACTORY);
+            return LongBinaryComparatorFactory.INSTANCE;
         }
         if (serde instanceof FloatSerializerDeserializer) {
-            return PointableBinaryComparatorFactory.of(FloatPointable.FACTORY);
+            return FloatBinaryComparatorFactory.INSTANCE;
         }
         if (serde instanceof DoubleSerializerDeserializer) {
-            return PointableBinaryComparatorFactory.of(DoublePointable.FACTORY);
+            return DoubleBinaryComparatorFactory.INSTANCE;
         }
         if (serde instanceof BooleanSerializerDeserializer) {
+            // TODO(ali): how come?
             throw new UnsupportedOperationException("Binary comparator factory for Boolean not implemented.");
         }
         if (serde instanceof UTF8StringSerializerDeserializer) {
diff --git a/hyracks-fullstack/hyracks/hyracks-examples/btree-example/btreeclient/src/main/java/org/apache/hyracks/examples/btree/client/InsertPipelineExample.java b/hyracks-fullstack/hyracks/hyracks-examples/btree-example/btreeclient/src/main/java/org/apache/hyracks/examples/btree/client/InsertPipelineExample.java
index 872fd35..bc6e20b 100644
--- a/hyracks-fullstack/hyracks/hyracks-examples/btree-example/btreeclient/src/main/java/org/apache/hyracks/examples/btree/client/InsertPipelineExample.java
+++ b/hyracks-fullstack/hyracks/hyracks-examples/btree-example/btreeclient/src/main/java/org/apache/hyracks/examples/btree/client/InsertPipelineExample.java
@@ -29,6 +29,7 @@ import org.apache.hyracks.api.dataflow.value.ITypeTraits;
 import org.apache.hyracks.api.dataflow.value.RecordDescriptor;
 import org.apache.hyracks.api.job.JobId;
 import org.apache.hyracks.api.job.JobSpecification;
+import org.apache.hyracks.data.std.accessors.IntegerBinaryComparatorFactory;
 import org.apache.hyracks.data.std.accessors.PointableBinaryComparatorFactory;
 import org.apache.hyracks.data.std.accessors.PointableBinaryHashFunctionFactory;
 import org.apache.hyracks.data.std.primitive.IntegerPointable;
@@ -135,7 +136,7 @@ public class InsertPipelineExample {
 
         // comparator factories for primary index
         IBinaryComparatorFactory[] primaryComparatorFactories = new IBinaryComparatorFactory[1];
-        primaryComparatorFactories[0] = PointableBinaryComparatorFactory.of(IntegerPointable.FACTORY);
+        primaryComparatorFactories[0] = IntegerBinaryComparatorFactory.INSTANCE;
 
         // the B-Tree expects its keyfields to be at the front of its input
         // tuple
@@ -163,7 +164,7 @@ public class InsertPipelineExample {
         // comparator factories for secondary index
         IBinaryComparatorFactory[] secondaryComparatorFactories = new IBinaryComparatorFactory[2];
         secondaryComparatorFactories[0] = PointableBinaryComparatorFactory.of(UTF8StringPointable.FACTORY);
-        secondaryComparatorFactories[1] = PointableBinaryComparatorFactory.of(IntegerPointable.FACTORY);
+        secondaryComparatorFactories[1] = IntegerBinaryComparatorFactory.INSTANCE;
 
         // the B-Tree expects its keyfields to be at the front of its input
         // tuple
diff --git a/hyracks-fullstack/hyracks/hyracks-examples/btree-example/btreeclient/src/main/java/org/apache/hyracks/examples/btree/client/PrimaryIndexBulkLoadExample.java b/hyracks-fullstack/hyracks/hyracks-examples/btree-example/btreeclient/src/main/java/org/apache/hyracks/examples/btree/client/PrimaryIndexBulkLoadExample.java
index 5ba53d5..0eaa083 100644
--- a/hyracks-fullstack/hyracks/hyracks-examples/btree-example/btreeclient/src/main/java/org/apache/hyracks/examples/btree/client/PrimaryIndexBulkLoadExample.java
+++ b/hyracks-fullstack/hyracks/hyracks-examples/btree-example/btreeclient/src/main/java/org/apache/hyracks/examples/btree/client/PrimaryIndexBulkLoadExample.java
@@ -28,7 +28,7 @@ import org.apache.hyracks.api.dataflow.value.ITypeTraits;
 import org.apache.hyracks.api.dataflow.value.RecordDescriptor;
 import org.apache.hyracks.api.job.JobId;
 import org.apache.hyracks.api.job.JobSpecification;
-import org.apache.hyracks.data.std.accessors.PointableBinaryComparatorFactory;
+import org.apache.hyracks.data.std.accessors.IntegerBinaryComparatorFactory;
 import org.apache.hyracks.data.std.accessors.PointableBinaryHashFunctionFactory;
 import org.apache.hyracks.data.std.primitive.IntegerPointable;
 import org.apache.hyracks.data.std.primitive.UTF8StringPointable;
@@ -123,7 +123,7 @@ public class PrimaryIndexBulkLoadExample {
         int[] sortFields = { 2 };
         // comparators for sort fields
         IBinaryComparatorFactory[] comparatorFactories = new IBinaryComparatorFactory[1];
-        comparatorFactories[0] = PointableBinaryComparatorFactory.of(IntegerPointable.FACTORY);
+        comparatorFactories[0] = IntegerBinaryComparatorFactory.INSTANCE;
         ExternalSortOperatorDescriptor sorter =
                 new ExternalSortOperatorDescriptor(spec, options.sbSize, sortFields, comparatorFactories, recDesc);
         JobHelper.createPartitionConstraint(spec, sorter, splitNCs);
diff --git a/hyracks-fullstack/hyracks/hyracks-examples/btree-example/btreeclient/src/main/java/org/apache/hyracks/examples/btree/client/PrimaryIndexSearchExample.java b/hyracks-fullstack/hyracks/hyracks-examples/btree-example/btreeclient/src/main/java/org/apache/hyracks/examples/btree/client/PrimaryIndexSearchExample.java
index a6b9af5..ab3db7d 100644
--- a/hyracks-fullstack/hyracks/hyracks-examples/btree-example/btreeclient/src/main/java/org/apache/hyracks/examples/btree/client/PrimaryIndexSearchExample.java
+++ b/hyracks-fullstack/hyracks/hyracks-examples/btree-example/btreeclient/src/main/java/org/apache/hyracks/examples/btree/client/PrimaryIndexSearchExample.java
@@ -28,7 +28,7 @@ import org.apache.hyracks.api.dataflow.value.RecordDescriptor;
 import org.apache.hyracks.api.exceptions.HyracksDataException;
 import org.apache.hyracks.api.job.JobId;
 import org.apache.hyracks.api.job.JobSpecification;
-import org.apache.hyracks.data.std.accessors.PointableBinaryComparatorFactory;
+import org.apache.hyracks.data.std.accessors.IntegerBinaryComparatorFactory;
 import org.apache.hyracks.data.std.primitive.IntegerPointable;
 import org.apache.hyracks.data.std.primitive.UTF8StringPointable;
 import org.apache.hyracks.dataflow.common.comm.io.ArrayTupleBuilder;
@@ -100,7 +100,7 @@ public class PrimaryIndexSearchExample {
 
         // comparators for btree
         IBinaryComparatorFactory[] comparatorFactories = new IBinaryComparatorFactory[1];
-        comparatorFactories[0] = PointableBinaryComparatorFactory.of(IntegerPointable.FACTORY);
+        comparatorFactories[0] = IntegerBinaryComparatorFactory.INSTANCE;
 
         // create roviders for B-Tree
         IStorageManager storageManager = BTreeHelperStorageManager.INSTANCE;
diff --git a/hyracks-fullstack/hyracks/hyracks-examples/btree-example/btreeclient/src/main/java/org/apache/hyracks/examples/btree/client/SecondaryIndexBulkLoadExample.java b/hyracks-fullstack/hyracks/hyracks-examples/btree-example/btreeclient/src/main/java/org/apache/hyracks/examples/btree/client/SecondaryIndexBulkLoadExample.java
index f266fa8..22e761d 100644
--- a/hyracks-fullstack/hyracks/hyracks-examples/btree-example/btreeclient/src/main/java/org/apache/hyracks/examples/btree/client/SecondaryIndexBulkLoadExample.java
+++ b/hyracks-fullstack/hyracks/hyracks-examples/btree-example/btreeclient/src/main/java/org/apache/hyracks/examples/btree/client/SecondaryIndexBulkLoadExample.java
@@ -25,6 +25,7 @@ import org.apache.hyracks.api.dataflow.value.ITypeTraits;
 import org.apache.hyracks.api.dataflow.value.RecordDescriptor;
 import org.apache.hyracks.api.job.JobId;
 import org.apache.hyracks.api.job.JobSpecification;
+import org.apache.hyracks.data.std.accessors.IntegerBinaryComparatorFactory;
 import org.apache.hyracks.data.std.accessors.PointableBinaryComparatorFactory;
 import org.apache.hyracks.data.std.primitive.IntegerPointable;
 import org.apache.hyracks.data.std.primitive.UTF8StringPointable;
@@ -113,7 +114,7 @@ public class SecondaryIndexBulkLoadExample {
         // comparators for sort fields and BTree fields
         IBinaryComparatorFactory[] comparatorFactories = new IBinaryComparatorFactory[2];
         comparatorFactories[0] = PointableBinaryComparatorFactory.of(UTF8StringPointable.FACTORY);
-        comparatorFactories[1] = PointableBinaryComparatorFactory.of(IntegerPointable.FACTORY);
+        comparatorFactories[1] = IntegerBinaryComparatorFactory.INSTANCE;
 
         // use a disk-order scan to read primary index
         IFileSplitProvider primarySplitProvider = JobHelper.createFileSplitProvider(splitNCs, options.primaryBTreeName);
diff --git a/hyracks-fullstack/hyracks/hyracks-examples/btree-example/btreeclient/src/main/java/org/apache/hyracks/examples/btree/client/SecondaryIndexSearchExample.java b/hyracks-fullstack/hyracks/hyracks-examples/btree-example/btreeclient/src/main/java/org/apache/hyracks/examples/btree/client/SecondaryIndexSearchExample.java
index 2f0ad23..c16550c 100644
--- a/hyracks-fullstack/hyracks/hyracks-examples/btree-example/btreeclient/src/main/java/org/apache/hyracks/examples/btree/client/SecondaryIndexSearchExample.java
+++ b/hyracks-fullstack/hyracks/hyracks-examples/btree-example/btreeclient/src/main/java/org/apache/hyracks/examples/btree/client/SecondaryIndexSearchExample.java
@@ -28,6 +28,7 @@ import org.apache.hyracks.api.dataflow.value.RecordDescriptor;
 import org.apache.hyracks.api.exceptions.HyracksDataException;
 import org.apache.hyracks.api.job.JobId;
 import org.apache.hyracks.api.job.JobSpecification;
+import org.apache.hyracks.data.std.accessors.IntegerBinaryComparatorFactory;
 import org.apache.hyracks.data.std.accessors.PointableBinaryComparatorFactory;
 import org.apache.hyracks.data.std.primitive.IntegerPointable;
 import org.apache.hyracks.data.std.primitive.UTF8StringPointable;
@@ -108,11 +109,11 @@ public class SecondaryIndexSearchExample {
         // comparators for sort fields and BTree fields
         IBinaryComparatorFactory[] secondaryComparatorFactories = new IBinaryComparatorFactory[2];
         secondaryComparatorFactories[0] = PointableBinaryComparatorFactory.of(UTF8StringPointable.FACTORY);
-        secondaryComparatorFactories[1] = PointableBinaryComparatorFactory.of(IntegerPointable.FACTORY);
+        secondaryComparatorFactories[1] = IntegerBinaryComparatorFactory.INSTANCE;
 
         // comparators for primary index
         IBinaryComparatorFactory[] primaryComparatorFactories = new IBinaryComparatorFactory[1];
-        primaryComparatorFactories[1] = PointableBinaryComparatorFactory.of(IntegerPointable.FACTORY);
+        primaryComparatorFactories[1] = IntegerBinaryComparatorFactory.INSTANCE;
 
         // schema of tuples coming out of primary index
         RecordDescriptor primaryRecDesc = new RecordDescriptor(new ISerializerDeserializer[] {
diff --git a/hyracks-fullstack/hyracks/hyracks-examples/hyracks-integration-tests/src/test/java/org/apache/hyracks/tests/am/rtree/AbstractRTreeOperatorTest.java b/hyracks-fullstack/hyracks/hyracks-examples/hyracks-integration-tests/src/test/java/org/apache/hyracks/tests/am/rtree/AbstractRTreeOperatorTest.java
index f22807b..3780c23 100644
--- a/hyracks-fullstack/hyracks/hyracks-examples/hyracks-integration-tests/src/test/java/org/apache/hyracks/tests/am/rtree/AbstractRTreeOperatorTest.java
+++ b/hyracks-fullstack/hyracks/hyracks-examples/hyracks-integration-tests/src/test/java/org/apache/hyracks/tests/am/rtree/AbstractRTreeOperatorTest.java
@@ -32,6 +32,7 @@ import org.apache.hyracks.api.exceptions.HyracksDataException;
 import org.apache.hyracks.api.io.FileSplit;
 import org.apache.hyracks.api.io.ManagedFileSplit;
 import org.apache.hyracks.api.job.JobSpecification;
+import org.apache.hyracks.data.std.accessors.DoubleBinaryComparatorFactory;
 import org.apache.hyracks.data.std.accessors.PointableBinaryComparatorFactory;
 import org.apache.hyracks.data.std.primitive.DoublePointable;
 import org.apache.hyracks.data.std.primitive.UTF8StringPointable;
@@ -178,10 +179,10 @@ public abstract class AbstractRTreeOperatorTest extends AbstractIntegrationTest
         secondaryTypeTraits[2] = DoublePointable.TYPE_TRAITS;
         secondaryTypeTraits[3] = DoublePointable.TYPE_TRAITS;
         secondaryTypeTraits[4] = UTF8StringPointable.TYPE_TRAITS;
-        secondaryComparatorFactories[0] = PointableBinaryComparatorFactory.of(DoublePointable.FACTORY);
-        secondaryComparatorFactories[1] = PointableBinaryComparatorFactory.of(DoublePointable.FACTORY);
-        secondaryComparatorFactories[2] = PointableBinaryComparatorFactory.of(DoublePointable.FACTORY);
-        secondaryComparatorFactories[3] = PointableBinaryComparatorFactory.of(DoublePointable.FACTORY);
+        secondaryComparatorFactories[0] = DoubleBinaryComparatorFactory.INSTANCE;
+        secondaryComparatorFactories[1] = DoubleBinaryComparatorFactory.INSTANCE;
+        secondaryComparatorFactories[2] = DoubleBinaryComparatorFactory.INSTANCE;
+        secondaryComparatorFactories[3] = DoubleBinaryComparatorFactory.INSTANCE;
 
         // This only used for LSMRTree
         int[] rtreeFields = null;
@@ -203,10 +204,10 @@ public abstract class AbstractRTreeOperatorTest extends AbstractIntegrationTest
             btreeComparatorFactories[0] = PointableBinaryComparatorFactory.of(UTF8StringPointable.FACTORY);
             btreeFields = new int[] { 4 };
         } else {
-            btreeComparatorFactories[0] = PointableBinaryComparatorFactory.of(DoublePointable.FACTORY);
-            btreeComparatorFactories[1] = PointableBinaryComparatorFactory.of(DoublePointable.FACTORY);
-            btreeComparatorFactories[2] = PointableBinaryComparatorFactory.of(DoublePointable.FACTORY);
-            btreeComparatorFactories[3] = PointableBinaryComparatorFactory.of(DoublePointable.FACTORY);
+            btreeComparatorFactories[0] = DoubleBinaryComparatorFactory.INSTANCE;
+            btreeComparatorFactories[1] = DoubleBinaryComparatorFactory.INSTANCE;
+            btreeComparatorFactories[2] = DoubleBinaryComparatorFactory.INSTANCE;
+            btreeComparatorFactories[3] = DoubleBinaryComparatorFactory.INSTANCE;
             btreeComparatorFactories[4] = PointableBinaryComparatorFactory.of(UTF8StringPointable.FACTORY);
         }
 
diff --git a/hyracks-fullstack/hyracks/hyracks-examples/hyracks-integration-tests/src/test/java/org/apache/hyracks/tests/integration/CountOfCountsTest.java b/hyracks-fullstack/hyracks/hyracks-examples/hyracks-integration-tests/src/test/java/org/apache/hyracks/tests/integration/CountOfCountsTest.java
index c542fe9..67e66de 100644
--- a/hyracks-fullstack/hyracks/hyracks-examples/hyracks-integration-tests/src/test/java/org/apache/hyracks/tests/integration/CountOfCountsTest.java
+++ b/hyracks-fullstack/hyracks/hyracks-examples/hyracks-integration-tests/src/test/java/org/apache/hyracks/tests/integration/CountOfCountsTest.java
@@ -31,9 +31,9 @@ import org.apache.hyracks.api.io.FileSplit;
 import org.apache.hyracks.api.io.ManagedFileSplit;
 import org.apache.hyracks.api.job.JobSpecification;
 import org.apache.hyracks.api.result.ResultSetId;
+import org.apache.hyracks.data.std.accessors.IntegerBinaryComparatorFactory;
 import org.apache.hyracks.data.std.accessors.PointableBinaryComparatorFactory;
 import org.apache.hyracks.data.std.accessors.PointableBinaryHashFunctionFactory;
-import org.apache.hyracks.data.std.primitive.IntegerPointable;
 import org.apache.hyracks.data.std.primitive.UTF8StringPointable;
 import org.apache.hyracks.dataflow.common.data.marshalling.IntegerSerializerDeserializer;
 import org.apache.hyracks.dataflow.common.data.marshalling.UTF8StringSerializerDeserializer;
@@ -87,17 +87,17 @@ public class CountOfCountsTest extends AbstractIntegrationTest {
         PartitionConstraintHelper.addAbsoluteLocationConstraint(spec, group, NC2_ID);
 
         InMemorySortOperatorDescriptor sorter2 = new InMemorySortOperatorDescriptor(spec, new int[] { 1 },
-                new IBinaryComparatorFactory[] { PointableBinaryComparatorFactory.of(IntegerPointable.FACTORY) },
-                desc2);
+                new IBinaryComparatorFactory[] { IntegerBinaryComparatorFactory.INSTANCE }, desc2);
         PartitionConstraintHelper.addAbsoluteLocationConstraint(spec, sorter2, NC2_ID);
 
         RecordDescriptor desc3 = new RecordDescriptor(new ISerializerDeserializer[] {
                 IntegerSerializerDeserializer.INSTANCE, IntegerSerializerDeserializer.INSTANCE });
-        PreclusteredGroupOperatorDescriptor group2 = new PreclusteredGroupOperatorDescriptor(spec, new int[] { 1 },
-                new IBinaryComparatorFactory[] { PointableBinaryComparatorFactory.of(IntegerPointable.FACTORY) },
-                new MultiFieldsAggregatorFactory(
-                        new IFieldAggregateDescriptorFactory[] { new CountFieldAggregatorFactory(true) }),
-                desc3);
+        PreclusteredGroupOperatorDescriptor group2 =
+                new PreclusteredGroupOperatorDescriptor(spec, new int[] { 1 },
+                        new IBinaryComparatorFactory[] { IntegerBinaryComparatorFactory.INSTANCE },
+                        new MultiFieldsAggregatorFactory(
+                                new IFieldAggregateDescriptorFactory[] { new CountFieldAggregatorFactory(true) }),
+                        desc3);
         PartitionConstraintHelper.addAbsoluteLocationConstraint(spec, group2, NC2_ID);
 
         ResultSetId rsId = new ResultSetId(1);
@@ -158,17 +158,17 @@ public class CountOfCountsTest extends AbstractIntegrationTest {
         PartitionConstraintHelper.addAbsoluteLocationConstraint(spec, group, NC1_ID, NC2_ID, NC1_ID, NC2_ID);
 
         InMemorySortOperatorDescriptor sorter2 = new InMemorySortOperatorDescriptor(spec, new int[] { 1 },
-                new IBinaryComparatorFactory[] { PointableBinaryComparatorFactory.of(IntegerPointable.FACTORY) },
-                desc2);
+                new IBinaryComparatorFactory[] { IntegerBinaryComparatorFactory.INSTANCE }, desc2);
         PartitionConstraintHelper.addAbsoluteLocationConstraint(spec, sorter2, NC1_ID, NC2_ID);
 
         RecordDescriptor desc3 = new RecordDescriptor(new ISerializerDeserializer[] {
                 IntegerSerializerDeserializer.INSTANCE, IntegerSerializerDeserializer.INSTANCE });
-        PreclusteredGroupOperatorDescriptor group2 = new PreclusteredGroupOperatorDescriptor(spec, new int[] { 1 },
-                new IBinaryComparatorFactory[] { PointableBinaryComparatorFactory.of(IntegerPointable.FACTORY) },
-                new MultiFieldsAggregatorFactory(
-                        new IFieldAggregateDescriptorFactory[] { new CountFieldAggregatorFactory(true) }),
-                desc3);
+        PreclusteredGroupOperatorDescriptor group2 =
+                new PreclusteredGroupOperatorDescriptor(spec, new int[] { 1 },
+                        new IBinaryComparatorFactory[] { IntegerBinaryComparatorFactory.INSTANCE },
+                        new MultiFieldsAggregatorFactory(
+                                new IFieldAggregateDescriptorFactory[] { new CountFieldAggregatorFactory(true) }),
+                        desc3);
         PartitionConstraintHelper.addAbsoluteLocationConstraint(spec, group2, NC1_ID, NC2_ID);
 
         ResultSetId rsId = new ResultSetId(1);
@@ -230,17 +230,17 @@ public class CountOfCountsTest extends AbstractIntegrationTest {
         PartitionConstraintHelper.addAbsoluteLocationConstraint(spec, group, NC1_ID, NC2_ID, NC1_ID, NC2_ID);
 
         InMemorySortOperatorDescriptor sorter2 = new InMemorySortOperatorDescriptor(spec, new int[] { 1 },
-                new IBinaryComparatorFactory[] { PointableBinaryComparatorFactory.of(IntegerPointable.FACTORY) },
-                desc2);
+                new IBinaryComparatorFactory[] { IntegerBinaryComparatorFactory.INSTANCE }, desc2);
         PartitionConstraintHelper.addAbsoluteLocationConstraint(spec, sorter2, NC1_ID, NC2_ID);
 
         RecordDescriptor desc3 = new RecordDescriptor(new ISerializerDeserializer[] {
                 IntegerSerializerDeserializer.INSTANCE, IntegerSerializerDeserializer.INSTANCE });
-        PreclusteredGroupOperatorDescriptor group2 = new PreclusteredGroupOperatorDescriptor(spec, new int[] { 1 },
-                new IBinaryComparatorFactory[] { PointableBinaryComparatorFactory.of(IntegerPointable.FACTORY) },
-                new MultiFieldsAggregatorFactory(
-                        new IFieldAggregateDescriptorFactory[] { new CountFieldAggregatorFactory(true) }),
-                desc3);
+        PreclusteredGroupOperatorDescriptor group2 =
+                new PreclusteredGroupOperatorDescriptor(spec, new int[] { 1 },
+                        new IBinaryComparatorFactory[] { IntegerBinaryComparatorFactory.INSTANCE },
+                        new MultiFieldsAggregatorFactory(
+                                new IFieldAggregateDescriptorFactory[] { new CountFieldAggregatorFactory(true) }),
+                        desc3);
         PartitionConstraintHelper.addAbsoluteLocationConstraint(spec, group2, NC1_ID, NC2_ID);
 
         ResultSetId rsId = new ResultSetId(1);
diff --git a/hyracks-fullstack/hyracks/hyracks-examples/hyracks-integration-tests/src/test/java/org/apache/hyracks/tests/unit/AbstractRunGeneratorTest.java b/hyracks-fullstack/hyracks/hyracks-examples/hyracks-integration-tests/src/test/java/org/apache/hyracks/tests/unit/AbstractRunGeneratorTest.java
index d3b6b5c..c8d7644 100644
--- a/hyracks-fullstack/hyracks/hyracks-examples/hyracks-integration-tests/src/test/java/org/apache/hyracks/tests/unit/AbstractRunGeneratorTest.java
+++ b/hyracks-fullstack/hyracks/hyracks-examples/hyracks-integration-tests/src/test/java/org/apache/hyracks/tests/unit/AbstractRunGeneratorTest.java
@@ -19,7 +19,7 @@
 
 package org.apache.hyracks.tests.unit;
 
-import static org.junit.Assert.*;
+import static org.junit.Assert.assertTrue;
 
 import java.io.DataInputStream;
 import java.util.ArrayList;
@@ -37,8 +37,8 @@ import org.apache.hyracks.api.dataflow.value.IBinaryComparatorFactory;
 import org.apache.hyracks.api.dataflow.value.ISerializerDeserializer;
 import org.apache.hyracks.api.dataflow.value.RecordDescriptor;
 import org.apache.hyracks.api.exceptions.HyracksDataException;
+import org.apache.hyracks.data.std.accessors.IntegerBinaryComparatorFactory;
 import org.apache.hyracks.data.std.accessors.PointableBinaryComparatorFactory;
-import org.apache.hyracks.data.std.primitive.IntegerPointable;
 import org.apache.hyracks.data.std.primitive.UTF8StringPointable;
 import org.apache.hyracks.dataflow.common.comm.io.ArrayTupleBuilder;
 import org.apache.hyracks.dataflow.common.comm.io.FrameTupleAppender;
@@ -59,9 +59,8 @@ public abstract class AbstractRunGeneratorTest {
     static RecordDescriptor RecordDesc = new RecordDescriptor(SerDers);
     static Random GRandom = new Random(0);
     static int[] SortFields = new int[] { 0, 1 };
-    static IBinaryComparatorFactory[] ComparatorFactories =
-            new IBinaryComparatorFactory[] { PointableBinaryComparatorFactory.of(IntegerPointable.FACTORY),
-                    PointableBinaryComparatorFactory.of(UTF8StringPointable.FACTORY) };
+    static IBinaryComparatorFactory[] ComparatorFactories = new IBinaryComparatorFactory[] {
+            IntegerBinaryComparatorFactory.INSTANCE, PointableBinaryComparatorFactory.of(UTF8StringPointable.FACTORY) };
 
     static void assertMaxFrameSizesAreAllEqualsTo(List<GeneratedRunFileReader> maxSize, int pageSize) {
         for (int i = 0; i < maxSize.size(); i++) {
diff --git a/hyracks-fullstack/hyracks/hyracks-examples/hyracks-integration-tests/src/test/java/org/apache/hyracks/tests/unit/IntersectOperatorDescriptorTest.java b/hyracks-fullstack/hyracks/hyracks-examples/hyracks-integration-tests/src/test/java/org/apache/hyracks/tests/unit/IntersectOperatorDescriptorTest.java
index fcce975..dac307a 100644
--- a/hyracks-fullstack/hyracks/hyracks-examples/hyracks-integration-tests/src/test/java/org/apache/hyracks/tests/unit/IntersectOperatorDescriptorTest.java
+++ b/hyracks-fullstack/hyracks/hyracks-examples/hyracks-integration-tests/src/test/java/org/apache/hyracks/tests/unit/IntersectOperatorDescriptorTest.java
@@ -38,8 +38,7 @@ import org.apache.hyracks.api.dataflow.value.RecordDescriptor;
 import org.apache.hyracks.api.exceptions.HyracksDataException;
 import org.apache.hyracks.api.exceptions.HyracksException;
 import org.apache.hyracks.api.job.IOperatorDescriptorRegistry;
-import org.apache.hyracks.data.std.accessors.PointableBinaryComparatorFactory;
-import org.apache.hyracks.data.std.primitive.IntegerPointable;
+import org.apache.hyracks.data.std.accessors.IntegerBinaryComparatorFactory;
 import org.apache.hyracks.dataflow.common.data.marshalling.IntegerSerializerDeserializer;
 import org.apache.hyracks.dataflow.std.intersect.IntersectOperatorDescriptor;
 import org.apache.hyracks.test.support.TestUtils;
@@ -72,9 +71,8 @@ public class IntersectOperatorDescriptorTest {
         inputRecordDescriptor = new RecordDescriptor[nInputs];
 
         normalizedKeyFactory = null;
-        comparatorFactory =
-                new IBinaryComparatorFactory[] { PointableBinaryComparatorFactory.of(IntegerPointable.FACTORY),
-                        PointableBinaryComparatorFactory.of(IntegerPointable.FACTORY) };
+        comparatorFactory = new IBinaryComparatorFactory[] { IntegerBinaryComparatorFactory.INSTANCE,
+                IntegerBinaryComparatorFactory.INSTANCE };
 
         for (int i = 0; i < nInputs; i++) {
             compareFields[i] = new int[nProjectFields];
diff --git a/hyracks-fullstack/hyracks/hyracks-examples/tpch-example/tpchclient/src/main/java/org/apache/hyracks/examples/tpch/client/Groupby.java b/hyracks-fullstack/hyracks/hyracks-examples/tpch-example/tpchclient/src/main/java/org/apache/hyracks/examples/tpch/client/Groupby.java
index cb9307b..72660c0 100644
--- a/hyracks-fullstack/hyracks/hyracks-examples/tpch-example/tpchclient/src/main/java/org/apache/hyracks/examples/tpch/client/Groupby.java
+++ b/hyracks-fullstack/hyracks/hyracks-examples/tpch-example/tpchclient/src/main/java/org/apache/hyracks/examples/tpch/client/Groupby.java
@@ -33,8 +33,8 @@ import org.apache.hyracks.api.dataflow.value.RecordDescriptor;
 import org.apache.hyracks.api.io.FileSplit;
 import org.apache.hyracks.api.job.JobId;
 import org.apache.hyracks.api.job.JobSpecification;
+import org.apache.hyracks.data.std.accessors.IntegerBinaryComparatorFactory;
 import org.apache.hyracks.data.std.accessors.MurmurHash3BinaryHashFunctionFamily;
-import org.apache.hyracks.data.std.accessors.PointableBinaryComparatorFactory;
 import org.apache.hyracks.data.std.accessors.PointableBinaryHashFunctionFactory;
 import org.apache.hyracks.data.std.primitive.IntegerPointable;
 import org.apache.hyracks.dataflow.common.data.marshalling.IntegerSerializerDeserializer;
@@ -149,9 +149,7 @@ public class Groupby {
 
         if (alg.equalsIgnoreCase("hash")) {// external hash graph
             grouper = new ExternalGroupOperatorDescriptor(spec, htSize, fileSize, keys, frameLimit,
-                    new IBinaryComparatorFactory[] {
-                            // PointableBinaryComparatorFactory.of(IntegerPointable.FACTORY),
-                            PointableBinaryComparatorFactory.of(IntegerPointable.FACTORY) },
+                    new IBinaryComparatorFactory[] { IntegerBinaryComparatorFactory.INSTANCE },
                     new IntegerNormalizedKeyComputerFactory(),
                     new MultiFieldsAggregatorFactory(
                             new IFieldAggregateDescriptorFactory[] { new CountFieldAggregatorFactory(false) }),
@@ -164,9 +162,7 @@ public class Groupby {
         } else if (alg.equalsIgnoreCase("sort")) {
             grouper = new SortGroupByOperatorDescriptor(spec, frameLimit, keys, keys,
                     new IntegerNormalizedKeyComputerFactory(),
-                    new IBinaryComparatorFactory[] {
-                            // PointableBinaryComparatorFactory.of(IntegerPointable.FACTORY),
-                            PointableBinaryComparatorFactory.of(IntegerPointable.FACTORY) },
+                    new IBinaryComparatorFactory[] { IntegerBinaryComparatorFactory.INSTANCE },
                     new MultiFieldsAggregatorFactory(
                             new IFieldAggregateDescriptorFactory[] { new CountFieldAggregatorFactory(true) }),
                     new MultiFieldsAggregatorFactory(new IFieldAggregateDescriptorFactory[] {
diff --git a/hyracks-fullstack/hyracks/hyracks-storage-am-rtree/src/main/java/org/apache/hyracks/storage/am/rtree/frames/RTreeNSMInteriorFrame.java b/hyracks-fullstack/hyracks/hyracks-storage-am-rtree/src/main/java/org/apache/hyracks/storage/am/rtree/frames/RTreeNSMInteriorFrame.java
index 18f7106..2333f4a 100644
--- a/hyracks-fullstack/hyracks/hyracks-storage-am-rtree/src/main/java/org/apache/hyracks/storage/am/rtree/frames/RTreeNSMInteriorFrame.java
+++ b/hyracks-fullstack/hyracks/hyracks-storage-am-rtree/src/main/java/org/apache/hyracks/storage/am/rtree/frames/RTreeNSMInteriorFrame.java
@@ -25,7 +25,7 @@ import java.util.Collections;
 import org.apache.hyracks.api.dataflow.value.IBinaryComparator;
 import org.apache.hyracks.api.exceptions.ErrorCode;
 import org.apache.hyracks.api.exceptions.HyracksDataException;
-import org.apache.hyracks.data.std.accessors.PointableBinaryComparatorFactory;
+import org.apache.hyracks.data.std.accessors.IntegerBinaryComparatorFactory;
 import org.apache.hyracks.data.std.primitive.IntegerPointable;
 import org.apache.hyracks.dataflow.common.data.accessors.ITupleReference;
 import org.apache.hyracks.storage.am.common.api.IPrimitiveValueProvider;
@@ -41,8 +41,7 @@ import org.apache.hyracks.storage.common.MultiComparator;
 public class RTreeNSMInteriorFrame extends RTreeNSMFrame implements IRTreeInteriorFrame {
 
     public static final int childPtrSize = 4;
-    private IBinaryComparator childPtrCmp =
-            PointableBinaryComparatorFactory.of(IntegerPointable.FACTORY).createBinaryComparator();
+    private IBinaryComparator childPtrCmp = IntegerBinaryComparatorFactory.INSTANCE.createBinaryComparator();
     private final int keyFieldCount;
 
     public RTreeNSMInteriorFrame(ITreeIndexTupleWriter tupleWriter, IPrimitiveValueProvider[] keyValueProviders,
diff --git a/hyracks-fullstack/hyracks/hyracks-test-support/src/main/java/org/apache/hyracks/storage/am/btree/OrderedIndexExamplesTest.java b/hyracks-fullstack/hyracks/hyracks-test-support/src/main/java/org/apache/hyracks/storage/am/btree/OrderedIndexExamplesTest.java
index 80e443d..900fc71 100644
--- a/hyracks-fullstack/hyracks/hyracks-test-support/src/main/java/org/apache/hyracks/storage/am/btree/OrderedIndexExamplesTest.java
+++ b/hyracks-fullstack/hyracks/hyracks-test-support/src/main/java/org/apache/hyracks/storage/am/btree/OrderedIndexExamplesTest.java
@@ -28,6 +28,7 @@ import org.apache.hyracks.api.dataflow.value.ISerializerDeserializer;
 import org.apache.hyracks.api.dataflow.value.ITypeTraits;
 import org.apache.hyracks.api.exceptions.ErrorCode;
 import org.apache.hyracks.api.exceptions.HyracksDataException;
+import org.apache.hyracks.data.std.accessors.IntegerBinaryComparatorFactory;
 import org.apache.hyracks.data.std.accessors.PointableBinaryComparatorFactory;
 import org.apache.hyracks.data.std.primitive.IntegerPointable;
 import org.apache.hyracks.data.std.primitive.UTF8StringPointable;
@@ -84,7 +85,7 @@ public abstract class OrderedIndexExamplesTest {
         // Declare keys.
         int keyFieldCount = 1;
         IBinaryComparatorFactory[] cmpFactories = new IBinaryComparatorFactory[keyFieldCount];
-        cmpFactories[0] = PointableBinaryComparatorFactory.of(IntegerPointable.FACTORY);
+        cmpFactories[0] = IntegerBinaryComparatorFactory.INSTANCE;
 
         // This is only used for the LSM-BTree.
         int[] bloomFilterKeyFields = new int[keyFieldCount];
@@ -248,8 +249,8 @@ public abstract class OrderedIndexExamplesTest {
         // declare keys
         int keyFieldCount = 2;
         IBinaryComparatorFactory[] cmpFactories = new IBinaryComparatorFactory[keyFieldCount];
-        cmpFactories[0] = PointableBinaryComparatorFactory.of(IntegerPointable.FACTORY);
-        cmpFactories[1] = PointableBinaryComparatorFactory.of(IntegerPointable.FACTORY);
+        cmpFactories[0] = IntegerBinaryComparatorFactory.INSTANCE;
+        cmpFactories[1] = IntegerBinaryComparatorFactory.INSTANCE;
 
         // This is only used for the LSM-BTree.
         int[] bloomFilterKeyFields = new int[keyFieldCount];
@@ -627,8 +628,8 @@ public abstract class OrderedIndexExamplesTest {
         // declare keys
         int keyFieldCount = 2;
         IBinaryComparatorFactory[] cmpFactories = new IBinaryComparatorFactory[keyFieldCount];
-        cmpFactories[0] = PointableBinaryComparatorFactory.of(IntegerPointable.FACTORY);
-        cmpFactories[1] = PointableBinaryComparatorFactory.of(IntegerPointable.FACTORY);
+        cmpFactories[0] = IntegerBinaryComparatorFactory.INSTANCE;
+        cmpFactories[1] = IntegerBinaryComparatorFactory.INSTANCE;
 
         // This is only used for the LSM-BTree.
         int[] bloomFilterKeyFields = new int[keyFieldCount];
@@ -699,7 +700,7 @@ public abstract class OrderedIndexExamplesTest {
         // declare keys
         int keyFieldCount = 1;
         IBinaryComparatorFactory[] cmpFactories = new IBinaryComparatorFactory[keyFieldCount];
-        cmpFactories[0] = PointableBinaryComparatorFactory.of(IntegerPointable.FACTORY);
+        cmpFactories[0] = IntegerBinaryComparatorFactory.INSTANCE;
 
         Random rnd = new Random();
         ArrayTupleBuilder tb = new ArrayTupleBuilder(fieldCount);
diff --git a/hyracks-fullstack/hyracks/hyracks-test-support/src/main/java/org/apache/hyracks/storage/am/rtree/AbstractRTreeExamplesTest.java b/hyracks-fullstack/hyracks/hyracks-test-support/src/main/java/org/apache/hyracks/storage/am/rtree/AbstractRTreeExamplesTest.java
index e73b771..eb02656 100644
--- a/hyracks-fullstack/hyracks/hyracks-test-support/src/main/java/org/apache/hyracks/storage/am/rtree/AbstractRTreeExamplesTest.java
+++ b/hyracks-fullstack/hyracks/hyracks-test-support/src/main/java/org/apache/hyracks/storage/am/rtree/AbstractRTreeExamplesTest.java
@@ -26,6 +26,8 @@ import org.apache.hyracks.api.dataflow.value.ISerializerDeserializer;
 import org.apache.hyracks.api.dataflow.value.ITypeTraits;
 import org.apache.hyracks.api.exceptions.ErrorCode;
 import org.apache.hyracks.api.exceptions.HyracksDataException;
+import org.apache.hyracks.data.std.accessors.DoubleBinaryComparatorFactory;
+import org.apache.hyracks.data.std.accessors.IntegerBinaryComparatorFactory;
 import org.apache.hyracks.data.std.accessors.PointableBinaryComparatorFactory;
 import org.apache.hyracks.data.std.primitive.DoublePointable;
 import org.apache.hyracks.data.std.primitive.IntegerPointable;
@@ -104,10 +106,10 @@ public abstract class AbstractRTreeExamplesTest {
         // Declare RTree keys.
         int rtreeKeyFieldCount = 4;
         IBinaryComparatorFactory[] rtreeCmpFactories = new IBinaryComparatorFactory[rtreeKeyFieldCount];
-        rtreeCmpFactories[0] = PointableBinaryComparatorFactory.of(IntegerPointable.FACTORY);
-        rtreeCmpFactories[1] = PointableBinaryComparatorFactory.of(IntegerPointable.FACTORY);
-        rtreeCmpFactories[2] = PointableBinaryComparatorFactory.of(IntegerPointable.FACTORY);
-        rtreeCmpFactories[3] = PointableBinaryComparatorFactory.of(IntegerPointable.FACTORY);
+        rtreeCmpFactories[0] = IntegerBinaryComparatorFactory.INSTANCE;
+        rtreeCmpFactories[1] = IntegerBinaryComparatorFactory.INSTANCE;
+        rtreeCmpFactories[2] = IntegerBinaryComparatorFactory.INSTANCE;
+        rtreeCmpFactories[3] = IntegerBinaryComparatorFactory.INSTANCE;
 
         // Declare BTree keys, this will only be used for LSMRTree
         int btreeKeyFieldCount;
@@ -117,8 +119,8 @@ public abstract class AbstractRTreeExamplesTest {
             //Parameters look different for LSM RTREE from LSM RTREE WITH ANTI MATTER TUPLES
             btreeKeyFieldCount = 2;
             btreeCmpFactories = new IBinaryComparatorFactory[btreeKeyFieldCount];
-            btreeCmpFactories[0] = PointableBinaryComparatorFactory.of(IntegerPointable.FACTORY);
-            btreeCmpFactories[1] = PointableBinaryComparatorFactory.of(IntegerPointable.FACTORY);
+            btreeCmpFactories[0] = IntegerBinaryComparatorFactory.INSTANCE;
+            btreeCmpFactories[1] = IntegerBinaryComparatorFactory.INSTANCE;
             btreeFields = new int[btreeKeyFieldCount];
             for (int i = 0; i < btreeKeyFieldCount; i++) {
                 btreeFields[i] = rtreeKeyFieldCount + i;
@@ -127,12 +129,12 @@ public abstract class AbstractRTreeExamplesTest {
         } else {
             btreeKeyFieldCount = 6;
             btreeCmpFactories = new IBinaryComparatorFactory[btreeKeyFieldCount];
-            btreeCmpFactories[0] = PointableBinaryComparatorFactory.of(IntegerPointable.FACTORY);
-            btreeCmpFactories[1] = PointableBinaryComparatorFactory.of(IntegerPointable.FACTORY);
-            btreeCmpFactories[2] = PointableBinaryComparatorFactory.of(IntegerPointable.FACTORY);
-            btreeCmpFactories[3] = PointableBinaryComparatorFactory.of(IntegerPointable.FACTORY);
-            btreeCmpFactories[4] = PointableBinaryComparatorFactory.of(IntegerPointable.FACTORY);
-            btreeCmpFactories[5] = PointableBinaryComparatorFactory.of(IntegerPointable.FACTORY);
+            btreeCmpFactories[0] = IntegerBinaryComparatorFactory.INSTANCE;
+            btreeCmpFactories[1] = IntegerBinaryComparatorFactory.INSTANCE;
+            btreeCmpFactories[2] = IntegerBinaryComparatorFactory.INSTANCE;
+            btreeCmpFactories[3] = IntegerBinaryComparatorFactory.INSTANCE;
+            btreeCmpFactories[4] = IntegerBinaryComparatorFactory.INSTANCE;
+            btreeCmpFactories[5] = IntegerBinaryComparatorFactory.INSTANCE;
         }
 
         // create value providers
@@ -218,10 +220,10 @@ public abstract class AbstractRTreeExamplesTest {
         // Declare RTree keys.
         int rtreeKeyFieldCount = 4;
         IBinaryComparatorFactory[] rtreeCmpFactories = new IBinaryComparatorFactory[rtreeKeyFieldCount];
-        rtreeCmpFactories[0] = PointableBinaryComparatorFactory.of(IntegerPointable.FACTORY);
-        rtreeCmpFactories[1] = PointableBinaryComparatorFactory.of(IntegerPointable.FACTORY);
-        rtreeCmpFactories[2] = PointableBinaryComparatorFactory.of(IntegerPointable.FACTORY);
-        rtreeCmpFactories[3] = PointableBinaryComparatorFactory.of(IntegerPointable.FACTORY);
+        rtreeCmpFactories[0] = IntegerBinaryComparatorFactory.INSTANCE;
+        rtreeCmpFactories[1] = IntegerBinaryComparatorFactory.INSTANCE;
+        rtreeCmpFactories[2] = IntegerBinaryComparatorFactory.INSTANCE;
+        rtreeCmpFactories[3] = IntegerBinaryComparatorFactory.INSTANCE;
 
         // Declare BTree keys, this will only be used for LSMRTree
         int btreeKeyFieldCount;
@@ -240,10 +242,10 @@ public abstract class AbstractRTreeExamplesTest {
         } else {
             btreeKeyFieldCount = 5;
             btreeCmpFactories = new IBinaryComparatorFactory[btreeKeyFieldCount];
-            btreeCmpFactories[0] = PointableBinaryComparatorFactory.of(IntegerPointable.FACTORY);
-            btreeCmpFactories[1] = PointableBinaryComparatorFactory.of(IntegerPointable.FACTORY);
-            btreeCmpFactories[2] = PointableBinaryComparatorFactory.of(IntegerPointable.FACTORY);
-            btreeCmpFactories[3] = PointableBinaryComparatorFactory.of(IntegerPointable.FACTORY);
+            btreeCmpFactories[0] = IntegerBinaryComparatorFactory.INSTANCE;
+            btreeCmpFactories[1] = IntegerBinaryComparatorFactory.INSTANCE;
+            btreeCmpFactories[2] = IntegerBinaryComparatorFactory.INSTANCE;
+            btreeCmpFactories[3] = IntegerBinaryComparatorFactory.INSTANCE;
             btreeCmpFactories[4] = PointableBinaryComparatorFactory.of(UTF8StringPointable.FACTORY);
         }
 
@@ -359,10 +361,10 @@ public abstract class AbstractRTreeExamplesTest {
         // Declare RTree keys.
         int rtreeKeyFieldCount = 4;
         IBinaryComparatorFactory[] rtreeCmpFactories = new IBinaryComparatorFactory[rtreeKeyFieldCount];
-        rtreeCmpFactories[0] = PointableBinaryComparatorFactory.of(IntegerPointable.FACTORY);
-        rtreeCmpFactories[1] = PointableBinaryComparatorFactory.of(IntegerPointable.FACTORY);
-        rtreeCmpFactories[2] = PointableBinaryComparatorFactory.of(IntegerPointable.FACTORY);
-        rtreeCmpFactories[3] = PointableBinaryComparatorFactory.of(IntegerPointable.FACTORY);
+        rtreeCmpFactories[0] = IntegerBinaryComparatorFactory.INSTANCE;
+        rtreeCmpFactories[1] = IntegerBinaryComparatorFactory.INSTANCE;
+        rtreeCmpFactories[2] = IntegerBinaryComparatorFactory.INSTANCE;
+        rtreeCmpFactories[3] = IntegerBinaryComparatorFactory.INSTANCE;
 
         // Declare BTree keys, this will only be used for LSMRTree
         int btreeKeyFieldCount;
@@ -381,10 +383,10 @@ public abstract class AbstractRTreeExamplesTest {
         } else {
             btreeKeyFieldCount = 5;
             btreeCmpFactories = new IBinaryComparatorFactory[btreeKeyFieldCount];
-            btreeCmpFactories[0] = PointableBinaryComparatorFactory.of(IntegerPointable.FACTORY);
-            btreeCmpFactories[1] = PointableBinaryComparatorFactory.of(IntegerPointable.FACTORY);
-            btreeCmpFactories[2] = PointableBinaryComparatorFactory.of(IntegerPointable.FACTORY);
-            btreeCmpFactories[3] = PointableBinaryComparatorFactory.of(IntegerPointable.FACTORY);
+            btreeCmpFactories[0] = IntegerBinaryComparatorFactory.INSTANCE;
+            btreeCmpFactories[1] = IntegerBinaryComparatorFactory.INSTANCE;
+            btreeCmpFactories[2] = IntegerBinaryComparatorFactory.INSTANCE;
+            btreeCmpFactories[3] = IntegerBinaryComparatorFactory.INSTANCE;
             btreeCmpFactories[4] = PointableBinaryComparatorFactory.of(UTF8StringPointable.FACTORY);
         }
 
@@ -505,12 +507,12 @@ public abstract class AbstractRTreeExamplesTest {
         // Declare RTree keys.
         int rtreeKeyFieldCount = 6;
         IBinaryComparatorFactory[] rtreeCmpFactories = new IBinaryComparatorFactory[rtreeKeyFieldCount];
-        rtreeCmpFactories[0] = PointableBinaryComparatorFactory.of(DoublePointable.FACTORY);
-        rtreeCmpFactories[1] = PointableBinaryComparatorFactory.of(DoublePointable.FACTORY);
-        rtreeCmpFactories[2] = PointableBinaryComparatorFactory.of(DoublePointable.FACTORY);
-        rtreeCmpFactories[3] = PointableBinaryComparatorFactory.of(DoublePointable.FACTORY);
-        rtreeCmpFactories[4] = PointableBinaryComparatorFactory.of(DoublePointable.FACTORY);
-        rtreeCmpFactories[5] = PointableBinaryComparatorFactory.of(DoublePointable.FACTORY);
+        rtreeCmpFactories[0] = DoubleBinaryComparatorFactory.INSTANCE;
+        rtreeCmpFactories[1] = DoubleBinaryComparatorFactory.INSTANCE;
+        rtreeCmpFactories[2] = DoubleBinaryComparatorFactory.INSTANCE;
+        rtreeCmpFactories[3] = DoubleBinaryComparatorFactory.INSTANCE;
+        rtreeCmpFactories[4] = DoubleBinaryComparatorFactory.INSTANCE;
+        rtreeCmpFactories[5] = DoubleBinaryComparatorFactory.INSTANCE;
 
         // Declare BTree keys, this will only be used for LSMRTree
         int btreeKeyFieldCount;
@@ -520,7 +522,7 @@ public abstract class AbstractRTreeExamplesTest {
             //Parameters look different for LSM RTREE from LSM RTREE WITH ANTI MATTER TUPLES
             btreeKeyFieldCount = 1;
             btreeCmpFactories = new IBinaryComparatorFactory[btreeKeyFieldCount];
-            btreeCmpFactories[0] = PointableBinaryComparatorFactory.of(DoublePointable.FACTORY);
+            btreeCmpFactories[0] = DoubleBinaryComparatorFactory.INSTANCE;
             btreeFields = new int[btreeKeyFieldCount];
             for (int i = 0; i < btreeKeyFieldCount; i++) {
                 btreeFields[i] = rtreeKeyFieldCount + i;
@@ -529,13 +531,13 @@ public abstract class AbstractRTreeExamplesTest {
         } else {
             btreeKeyFieldCount = 7;
             btreeCmpFactories = new IBinaryComparatorFactory[btreeKeyFieldCount];
-            btreeCmpFactories[0] = PointableBinaryComparatorFactory.of(DoublePointable.FACTORY);
-            btreeCmpFactories[1] = PointableBinaryComparatorFactory.of(DoublePointable.FACTORY);
-            btreeCmpFactories[2] = PointableBinaryComparatorFactory.of(DoublePointable.FACTORY);
-            btreeCmpFactories[3] = PointableBinaryComparatorFactory.of(DoublePointable.FACTORY);
-            btreeCmpFactories[4] = PointableBinaryComparatorFactory.of(DoublePointable.FACTORY);
-            btreeCmpFactories[5] = PointableBinaryComparatorFactory.of(DoublePointable.FACTORY);
-            btreeCmpFactories[6] = PointableBinaryComparatorFactory.of(DoublePointable.FACTORY);
+            btreeCmpFactories[0] = DoubleBinaryComparatorFactory.INSTANCE;
+            btreeCmpFactories[1] = DoubleBinaryComparatorFactory.INSTANCE;
+            btreeCmpFactories[2] = DoubleBinaryComparatorFactory.INSTANCE;
+            btreeCmpFactories[3] = DoubleBinaryComparatorFactory.INSTANCE;
+            btreeCmpFactories[4] = DoubleBinaryComparatorFactory.INSTANCE;
+            btreeCmpFactories[5] = DoubleBinaryComparatorFactory.INSTANCE;
+            btreeCmpFactories[6] = DoubleBinaryComparatorFactory.INSTANCE;
         }
 
         // create value providers
@@ -619,10 +621,10 @@ public abstract class AbstractRTreeExamplesTest {
         // Declare RTree keys.
         int rtreeKeyFieldCount = 4;
         IBinaryComparatorFactory[] rtreeCmpFactories = new IBinaryComparatorFactory[rtreeKeyFieldCount];
-        rtreeCmpFactories[0] = PointableBinaryComparatorFactory.of(IntegerPointable.FACTORY);
-        rtreeCmpFactories[1] = PointableBinaryComparatorFactory.of(IntegerPointable.FACTORY);
-        rtreeCmpFactories[2] = PointableBinaryComparatorFactory.of(IntegerPointable.FACTORY);
-        rtreeCmpFactories[3] = PointableBinaryComparatorFactory.of(IntegerPointable.FACTORY);
+        rtreeCmpFactories[0] = IntegerBinaryComparatorFactory.INSTANCE;
+        rtreeCmpFactories[1] = IntegerBinaryComparatorFactory.INSTANCE;
+        rtreeCmpFactories[2] = IntegerBinaryComparatorFactory.INSTANCE;
+        rtreeCmpFactories[3] = IntegerBinaryComparatorFactory.INSTANCE;
 
         // Declare BTree keys, this will only be used for LSMRTree
         int btreeKeyFieldCount;
@@ -632,7 +634,7 @@ public abstract class AbstractRTreeExamplesTest {
             //Parameters look different for LSM RTREE from LSM RTREE WITH ANTI MATTER TUPLES
             btreeKeyFieldCount = 1;
             btreeCmpFactories = new IBinaryComparatorFactory[btreeKeyFieldCount];
-            btreeCmpFactories[0] = PointableBinaryComparatorFactory.of(IntegerPointable.FACTORY);
+            btreeCmpFactories[0] = IntegerBinaryComparatorFactory.INSTANCE;
             btreeFields = new int[btreeKeyFieldCount];
             for (int i = 0; i < btreeKeyFieldCount; i++) {
                 btreeFields[i] = rtreeKeyFieldCount + i;
@@ -641,11 +643,11 @@ public abstract class AbstractRTreeExamplesTest {
         } else {
             btreeKeyFieldCount = 5;
             btreeCmpFactories = new IBinaryComparatorFactory[btreeKeyFieldCount];
-            btreeCmpFactories[0] = PointableBinaryComparatorFactory.of(IntegerPointable.FACTORY);
-            btreeCmpFactories[1] = PointableBinaryComparatorFactory.of(IntegerPointable.FACTORY);
-            btreeCmpFactories[2] = PointableBinaryComparatorFactory.of(IntegerPointable.FACTORY);
-            btreeCmpFactories[3] = PointableBinaryComparatorFactory.of(IntegerPointable.FACTORY);
-            btreeCmpFactories[4] = PointableBinaryComparatorFactory.of(IntegerPointable.FACTORY);
+            btreeCmpFactories[0] = IntegerBinaryComparatorFactory.INSTANCE;
+            btreeCmpFactories[1] = IntegerBinaryComparatorFactory.INSTANCE;
+            btreeCmpFactories[2] = IntegerBinaryComparatorFactory.INSTANCE;
+            btreeCmpFactories[3] = IntegerBinaryComparatorFactory.INSTANCE;
+            btreeCmpFactories[4] = IntegerBinaryComparatorFactory.INSTANCE;
         }
 
         // create value providers
@@ -760,10 +762,10 @@ public abstract class AbstractRTreeExamplesTest {
         // Declare RTree keys.
         int rtreeKeyFieldCount = 4;
         IBinaryComparatorFactory[] rtreeCmpFactories = new IBinaryComparatorFactory[rtreeKeyFieldCount];
-        rtreeCmpFactories[0] = PointableBinaryComparatorFactory.of(IntegerPointable.FACTORY);
-        rtreeCmpFactories[1] = PointableBinaryComparatorFactory.of(IntegerPointable.FACTORY);
-        rtreeCmpFactories[2] = PointableBinaryComparatorFactory.of(IntegerPointable.FACTORY);
-        rtreeCmpFactories[3] = PointableBinaryComparatorFactory.of(IntegerPointable.FACTORY);
+        rtreeCmpFactories[0] = IntegerBinaryComparatorFactory.INSTANCE;;
+        rtreeCmpFactories[1] = IntegerBinaryComparatorFactory.INSTANCE;
+        rtreeCmpFactories[2] = IntegerBinaryComparatorFactory.INSTANCE;
+        rtreeCmpFactories[3] = IntegerBinaryComparatorFactory.INSTANCE;
 
         // Declare BTree keys, this will only be used for LSMRTree
         int btreeKeyFieldCount;
@@ -773,7 +775,7 @@ public abstract class AbstractRTreeExamplesTest {
             //Parameters look different for LSM RTREE from LSM RTREE WITH ANTI MATTER TUPLES
             btreeKeyFieldCount = 1;
             btreeCmpFactories = new IBinaryComparatorFactory[btreeKeyFieldCount];
-            btreeCmpFactories[0] = PointableBinaryComparatorFactory.of(IntegerPointable.FACTORY);
+            btreeCmpFactories[0] = IntegerBinaryComparatorFactory.INSTANCE;
             btreeFields = new int[btreeKeyFieldCount];
             for (int i = 0; i < btreeKeyFieldCount; i++) {
                 btreeFields[i] = rtreeKeyFieldCount + i;
@@ -782,11 +784,11 @@ public abstract class AbstractRTreeExamplesTest {
         } else {
             btreeKeyFieldCount = 5;
             btreeCmpFactories = new IBinaryComparatorFactory[btreeKeyFieldCount];
-            btreeCmpFactories[0] = PointableBinaryComparatorFactory.of(IntegerPointable.FACTORY);
-            btreeCmpFactories[1] = PointableBinaryComparatorFactory.of(IntegerPointable.FACTORY);
-            btreeCmpFactories[2] = PointableBinaryComparatorFactory.of(IntegerPointable.FACTORY);
-            btreeCmpFactories[3] = PointableBinaryComparatorFactory.of(IntegerPointable.FACTORY);
-            btreeCmpFactories[4] = PointableBinaryComparatorFactory.of(IntegerPointable.FACTORY);
+            btreeCmpFactories[0] = IntegerBinaryComparatorFactory.INSTANCE;
+            btreeCmpFactories[1] = IntegerBinaryComparatorFactory.INSTANCE;
+            btreeCmpFactories[2] = IntegerBinaryComparatorFactory.INSTANCE;
+            btreeCmpFactories[3] = IntegerBinaryComparatorFactory.INSTANCE;
+            btreeCmpFactories[4] = IntegerBinaryComparatorFactory.INSTANCE;
         }
 
         // create value providers
diff --git a/hyracks-fullstack/hyracks/hyracks-tests/hyracks-storage-am-btree-test/src/test/java/org/apache/hyracks/storage/am/btree/BTreeSearchCursorTest.java b/hyracks-fullstack/hyracks/hyracks-tests/hyracks-storage-am-btree-test/src/test/java/org/apache/hyracks/storage/am/btree/BTreeSearchCursorTest.java
index ff28470..2e2f306 100644
--- a/hyracks-fullstack/hyracks/hyracks-tests/hyracks-storage-am-btree-test/src/test/java/org/apache/hyracks/storage/am/btree/BTreeSearchCursorTest.java
+++ b/hyracks-fullstack/hyracks/hyracks-tests/hyracks-storage-am-btree-test/src/test/java/org/apache/hyracks/storage/am/btree/BTreeSearchCursorTest.java
@@ -32,7 +32,7 @@ import org.apache.hyracks.api.dataflow.value.IBinaryComparator;
 import org.apache.hyracks.api.dataflow.value.IBinaryComparatorFactory;
 import org.apache.hyracks.api.dataflow.value.ITypeTraits;
 import org.apache.hyracks.api.exceptions.HyracksDataException;
-import org.apache.hyracks.data.std.accessors.PointableBinaryComparatorFactory;
+import org.apache.hyracks.data.std.accessors.IntegerBinaryComparatorFactory;
 import org.apache.hyracks.data.std.primitive.IntegerPointable;
 import org.apache.hyracks.dataflow.common.comm.io.ArrayTupleBuilder;
 import org.apache.hyracks.dataflow.common.comm.io.ArrayTupleReference;
@@ -69,8 +69,7 @@ public class BTreeSearchCursorTest extends AbstractBTreeTest {
             new BTreeTypeAwareTupleWriterFactory(TYPE_TRAITS, false);
     public static final ITreeIndexMetadataFrameFactory META_FRAME_FACTORY = new LIFOMetaDataFrameFactory();
     public static final int KEY_FIELDS_COUNT = 1;
-    public static final IBinaryComparatorFactory[] CMP_FACTORIES =
-            { PointableBinaryComparatorFactory.of(IntegerPointable.FACTORY) };
+    public static final IBinaryComparatorFactory[] CMP_FACTORIES = { IntegerBinaryComparatorFactory.INSTANCE };
     public static final ITreeIndexFrameFactory LEAF_FRAME_FACTORY = new BTreeNSMLeafFrameFactory(TUPLE_WRITER_FACTORY);
     public static final ITreeIndexFrameFactory INTERIOR_FRAME_FACTORY =
             new BTreeNSMInteriorFrameFactory(TUPLE_WRITER_FACTORY);
@@ -134,8 +133,8 @@ public class BTreeSearchCursorTest extends AbstractBTreeTest {
         // declare keys
         int keyFieldCount = 2;
         IBinaryComparatorFactory[] cmpFactories = new IBinaryComparatorFactory[keyFieldCount];
-        cmpFactories[0] = PointableBinaryComparatorFactory.of(IntegerPointable.FACTORY);
-        cmpFactories[1] = PointableBinaryComparatorFactory.of(IntegerPointable.FACTORY);
+        cmpFactories[0] = IntegerBinaryComparatorFactory.INSTANCE;
+        cmpFactories[1] = IntegerBinaryComparatorFactory.INSTANCE;
 
         ITreeIndexFrameFactory leafFrameFactory = new BTreeNSMLeafFrameFactory(TUPLE_WRITER_FACTORY);
         ITreeIndexFrameFactory interiorFrameFactory = new BTreeNSMInteriorFrameFactory(TUPLE_WRITER_FACTORY);
@@ -190,8 +189,8 @@ public class BTreeSearchCursorTest extends AbstractBTreeTest {
         // declare keys
         int keyFieldCount = 2;
         IBinaryComparatorFactory[] cmpFactories = new IBinaryComparatorFactory[keyFieldCount];
-        cmpFactories[0] = PointableBinaryComparatorFactory.of(IntegerPointable.FACTORY);
-        cmpFactories[1] = PointableBinaryComparatorFactory.of(IntegerPointable.FACTORY);
+        cmpFactories[0] = IntegerBinaryComparatorFactory.INSTANCE;
+        cmpFactories[1] = IntegerBinaryComparatorFactory.INSTANCE;
 
         ITreeIndexFrameFactory leafFrameFactory = new BTreeNSMLeafFrameFactory(TUPLE_WRITER_FACTORY);
         ITreeIndexFrameFactory interiorFrameFactory = new BTreeNSMInteriorFrameFactory(TUPLE_WRITER_FACTORY);
@@ -241,7 +240,7 @@ public class BTreeSearchCursorTest extends AbstractBTreeTest {
         ITupleReference highKey = TupleUtils.createIntegerTuple(false, hk);
 
         IBinaryComparator[] searchCmps = new IBinaryComparator[1];
-        searchCmps[0] = PointableBinaryComparatorFactory.of(IntegerPointable.FACTORY).createBinaryComparator();
+        searchCmps[0] = IntegerBinaryComparatorFactory.INSTANCE.createBinaryComparator();
         MultiComparator searchCmp = new MultiComparator(searchCmps);
 
         RangePredicate rangePred =
diff --git a/hyracks-fullstack/hyracks/hyracks-tests/hyracks-storage-am-btree-test/src/test/java/org/apache/hyracks/storage/am/btree/BTreeStatsTest.java b/hyracks-fullstack/hyracks/hyracks-tests/hyracks-storage-am-btree-test/src/test/java/org/apache/hyracks/storage/am/btree/BTreeStatsTest.java
index ea22355..dfaa7f9 100644
--- a/hyracks-fullstack/hyracks/hyracks-tests/hyracks-storage-am-btree-test/src/test/java/org/apache/hyracks/storage/am/btree/BTreeStatsTest.java
+++ b/hyracks-fullstack/hyracks/hyracks-tests/hyracks-storage-am-btree-test/src/test/java/org/apache/hyracks/storage/am/btree/BTreeStatsTest.java
@@ -31,7 +31,7 @@ import org.apache.hyracks.api.dataflow.value.ITypeTraits;
 import org.apache.hyracks.api.dataflow.value.RecordDescriptor;
 import org.apache.hyracks.api.exceptions.ErrorCode;
 import org.apache.hyracks.api.exceptions.HyracksDataException;
-import org.apache.hyracks.data.std.accessors.PointableBinaryComparatorFactory;
+import org.apache.hyracks.data.std.accessors.IntegerBinaryComparatorFactory;
 import org.apache.hyracks.data.std.primitive.IntegerPointable;
 import org.apache.hyracks.dataflow.common.comm.io.ArrayTupleBuilder;
 import org.apache.hyracks.dataflow.common.comm.io.FrameTupleAccessor;
@@ -83,7 +83,7 @@ public class BTreeStatsTest extends AbstractBTreeTest {
         // declare keys
         int keyFieldCount = 1;
         IBinaryComparatorFactory[] cmpFactories = new IBinaryComparatorFactory[keyFieldCount];
-        cmpFactories[0] = PointableBinaryComparatorFactory.of(IntegerPointable.FACTORY);
+        cmpFactories[0] = IntegerBinaryComparatorFactory.INSTANCE;
         BTreeTypeAwareTupleWriterFactory tupleWriterFactory = new BTreeTypeAwareTupleWriterFactory(typeTraits, false);
         ITreeIndexFrameFactory leafFrameFactory = new BTreeNSMLeafFrameFactory(tupleWriterFactory);
         ITreeIndexFrameFactory interiorFrameFactory = new BTreeNSMInteriorFrameFactory(tupleWriterFactory);
diff --git a/hyracks-fullstack/hyracks/hyracks-tests/hyracks-storage-am-btree-test/src/test/java/org/apache/hyracks/storage/am/btree/BTreeUpdateSearchTest.java b/hyracks-fullstack/hyracks/hyracks-tests/hyracks-storage-am-btree-test/src/test/java/org/apache/hyracks/storage/am/btree/BTreeUpdateSearchTest.java
index 9a1b6bb..8e5c77d 100644
--- a/hyracks-fullstack/hyracks/hyracks-tests/hyracks-storage-am-btree-test/src/test/java/org/apache/hyracks/storage/am/btree/BTreeUpdateSearchTest.java
+++ b/hyracks-fullstack/hyracks/hyracks-tests/hyracks-storage-am-btree-test/src/test/java/org/apache/hyracks/storage/am/btree/BTreeUpdateSearchTest.java
@@ -25,7 +25,7 @@ import org.apache.hyracks.api.dataflow.value.ISerializerDeserializer;
 import org.apache.hyracks.api.dataflow.value.ITypeTraits;
 import org.apache.hyracks.api.exceptions.ErrorCode;
 import org.apache.hyracks.api.exceptions.HyracksDataException;
-import org.apache.hyracks.data.std.accessors.PointableBinaryComparatorFactory;
+import org.apache.hyracks.data.std.accessors.IntegerBinaryComparatorFactory;
 import org.apache.hyracks.data.std.primitive.IntegerPointable;
 import org.apache.hyracks.dataflow.common.comm.io.ArrayTupleBuilder;
 import org.apache.hyracks.dataflow.common.comm.io.ArrayTupleReference;
@@ -68,7 +68,7 @@ public class BTreeUpdateSearchTest extends AbstractBTreeTest {
         // declare keys
         int keyFieldCount = 1;
         IBinaryComparatorFactory[] cmpFactories = new IBinaryComparatorFactory[keyFieldCount];
-        cmpFactories[0] = PointableBinaryComparatorFactory.of(IntegerPointable.FACTORY);
+        cmpFactories[0] = IntegerBinaryComparatorFactory.INSTANCE;
 
         @SuppressWarnings("rawtypes")
         ISerializerDeserializer[] recDescSers =
diff --git a/hyracks-fullstack/hyracks/hyracks-tests/hyracks-storage-am-btree-test/src/test/java/org/apache/hyracks/storage/am/btree/FieldPrefixNSMTest.java b/hyracks-fullstack/hyracks/hyracks-tests/hyracks-storage-am-btree-test/src/test/java/org/apache/hyracks/storage/am/btree/FieldPrefixNSMTest.java
index 48e8d51..fe05828 100644
--- a/hyracks-fullstack/hyracks/hyracks-tests/hyracks-storage-am-btree-test/src/test/java/org/apache/hyracks/storage/am/btree/FieldPrefixNSMTest.java
+++ b/hyracks-fullstack/hyracks/hyracks-tests/hyracks-storage-am-btree-test/src/test/java/org/apache/hyracks/storage/am/btree/FieldPrefixNSMTest.java
@@ -31,7 +31,7 @@ import org.apache.hyracks.api.dataflow.value.ISerializerDeserializer;
 import org.apache.hyracks.api.dataflow.value.ITypeTraits;
 import org.apache.hyracks.api.dataflow.value.RecordDescriptor;
 import org.apache.hyracks.api.exceptions.HyracksDataException;
-import org.apache.hyracks.data.std.accessors.PointableBinaryComparatorFactory;
+import org.apache.hyracks.data.std.accessors.IntegerBinaryComparatorFactory;
 import org.apache.hyracks.data.std.primitive.IntegerPointable;
 import org.apache.hyracks.dataflow.common.comm.io.ArrayTupleBuilder;
 import org.apache.hyracks.dataflow.common.comm.io.FrameTupleAccessor;
@@ -111,9 +111,9 @@ public class FieldPrefixNSMTest extends AbstractBTreeTest {
         // declare keys
         int keyFieldCount = 3;
         IBinaryComparator[] cmps = new IBinaryComparator[keyFieldCount];
-        cmps[0] = PointableBinaryComparatorFactory.of(IntegerPointable.FACTORY).createBinaryComparator();
-        cmps[1] = PointableBinaryComparatorFactory.of(IntegerPointable.FACTORY).createBinaryComparator();
-        cmps[2] = PointableBinaryComparatorFactory.of(IntegerPointable.FACTORY).createBinaryComparator();
+        cmps[0] = IntegerBinaryComparatorFactory.INSTANCE.createBinaryComparator();
+        cmps[1] = IntegerBinaryComparatorFactory.INSTANCE.createBinaryComparator();
+        cmps[2] = IntegerBinaryComparatorFactory.INSTANCE.createBinaryComparator();
         MultiComparator cmp = new MultiComparator(cmps);
 
         // just for printing
diff --git a/hyracks-fullstack/hyracks/hyracks-tests/hyracks-storage-am-lsm-btree-test/src/test/java/org/apache/hyracks/storage/am/lsm/btree/LSMBTreeExamplesTest.java b/hyracks-fullstack/hyracks/hyracks-tests/hyracks-storage-am-lsm-btree-test/src/test/java/org/apache/hyracks/storage/am/lsm/btree/LSMBTreeExamplesTest.java
index b8727b0..83d9bf1 100644
--- a/hyracks-fullstack/hyracks/hyracks-tests/hyracks-storage-am-lsm-btree-test/src/test/java/org/apache/hyracks/storage/am/lsm/btree/LSMBTreeExamplesTest.java
+++ b/hyracks-fullstack/hyracks/hyracks-tests/hyracks-storage-am-lsm-btree-test/src/test/java/org/apache/hyracks/storage/am/lsm/btree/LSMBTreeExamplesTest.java
@@ -23,7 +23,7 @@ import org.apache.hyracks.api.dataflow.value.IBinaryComparatorFactory;
 import org.apache.hyracks.api.dataflow.value.ISerializerDeserializer;
 import org.apache.hyracks.api.dataflow.value.ITypeTraits;
 import org.apache.hyracks.api.exceptions.HyracksDataException;
-import org.apache.hyracks.data.std.accessors.PointableBinaryComparatorFactory;
+import org.apache.hyracks.data.std.accessors.IntegerBinaryComparatorFactory;
 import org.apache.hyracks.data.std.primitive.IntegerPointable;
 import org.apache.hyracks.dataflow.common.comm.io.ArrayTupleBuilder;
 import org.apache.hyracks.dataflow.common.comm.io.ArrayTupleReference;
@@ -98,15 +98,14 @@ public class LSMBTreeExamplesTest extends OrderedIndexExamplesTest {
         // Declare keys.
         int keyFieldCount = 1;
         IBinaryComparatorFactory[] cmpFactories = new IBinaryComparatorFactory[keyFieldCount];
-        cmpFactories[0] = PointableBinaryComparatorFactory.of(IntegerPointable.FACTORY);
+        cmpFactories[0] = IntegerBinaryComparatorFactory.INSTANCE;
 
         // This is only used for the LSM-BTree.
         int[] bloomFilterKeyFields = new int[keyFieldCount];
         bloomFilterKeyFields[0] = 0;
 
         ITypeTraits[] filterTypeTraits = { IntegerPointable.TYPE_TRAITS };
-        IBinaryComparatorFactory[] filterCmpFactories =
-                { PointableBinaryComparatorFactory.of(IntegerPointable.FACTORY) };
+        IBinaryComparatorFactory[] filterCmpFactories = { IntegerBinaryComparatorFactory.INSTANCE };
         int[] filterFields = { 1 };
         int[] btreeFields = { 1 };
         ITreeIndex treeIndex = createTreeIndex(typeTraits, cmpFactories, bloomFilterKeyFields, filterTypeTraits,
diff --git a/hyracks-fullstack/hyracks/hyracks-tests/hyracks-storage-am-lsm-btree-test/src/test/java/org/apache/hyracks/storage/am/lsm/btree/cursor/LSMBTreePointSearchCursorTest.java b/hyracks-fullstack/hyracks/hyracks-tests/hyracks-storage-am-lsm-btree-test/src/test/java/org/apache/hyracks/storage/am/lsm/btree/cursor/LSMBTreePointSearchCursorTest.java
index 69f92a4..3c4ae51 100644
--- a/hyracks-fullstack/hyracks/hyracks-tests/hyracks-storage-am-lsm-btree-test/src/test/java/org/apache/hyracks/storage/am/lsm/btree/cursor/LSMBTreePointSearchCursorTest.java
+++ b/hyracks-fullstack/hyracks/hyracks-tests/hyracks-storage-am-lsm-btree-test/src/test/java/org/apache/hyracks/storage/am/lsm/btree/cursor/LSMBTreePointSearchCursorTest.java
@@ -27,7 +27,7 @@ import org.apache.hyracks.api.dataflow.value.ISerializerDeserializer;
 import org.apache.hyracks.api.dataflow.value.ITypeTraits;
 import org.apache.hyracks.api.exceptions.ErrorCode;
 import org.apache.hyracks.api.exceptions.HyracksDataException;
-import org.apache.hyracks.data.std.accessors.PointableBinaryComparatorFactory;
+import org.apache.hyracks.data.std.accessors.IntegerBinaryComparatorFactory;
 import org.apache.hyracks.data.std.primitive.IntegerPointable;
 import org.apache.hyracks.dataflow.common.comm.io.ArrayTupleBuilder;
 import org.apache.hyracks.dataflow.common.comm.io.ArrayTupleReference;
@@ -60,8 +60,7 @@ public class LSMBTreePointSearchCursorTest extends IIndexCursorTest {
     public static final ISerializerDeserializer[] FIELD_SERDES =
             { IntegerSerializerDeserializer.INSTANCE, IntegerSerializerDeserializer.INSTANCE };
     public static final int KEY_FIELD_COUNT = 1;
-    public static final IBinaryComparatorFactory[] CMP_FACTORIES =
-            { PointableBinaryComparatorFactory.of(IntegerPointable.FACTORY) };
+    public static final IBinaryComparatorFactory[] CMP_FACTORIES = { IntegerBinaryComparatorFactory.INSTANCE };
     public static final int[] BLOOM_FILTER_KEY_FIELDS = { 0 };
     public static final Random RND = new Random(50);
 
diff --git a/hyracks-fullstack/hyracks/hyracks-tests/hyracks-storage-am-lsm-invertedindex-test/src/test/java/org/apache/hyracks/storage/am/lsm/invertedindex/ondisk/OnDiskInvertedIndexLifecycleTest.java b/hyracks-fullstack/hyracks/hyracks-tests/hyracks-storage-am-lsm-invertedindex-test/src/test/java/org/apache/hyracks/storage/am/lsm/invertedindex/ondisk/OnDiskInvertedIndexLifecycleTest.java
index 0db06e5..f3619b9 100644
--- a/hyracks-fullstack/hyracks/hyracks-tests/hyracks-storage-am-lsm-invertedindex-test/src/test/java/org/apache/hyracks/storage/am/lsm/invertedindex/ondisk/OnDiskInvertedIndexLifecycleTest.java
+++ b/hyracks-fullstack/hyracks/hyracks-tests/hyracks-storage-am-lsm-invertedindex-test/src/test/java/org/apache/hyracks/storage/am/lsm/invertedindex/ondisk/OnDiskInvertedIndexLifecycleTest.java
@@ -22,6 +22,7 @@ package org.apache.hyracks.storage.am.lsm.invertedindex.ondisk;
 import org.apache.hyracks.api.dataflow.value.IBinaryComparatorFactory;
 import org.apache.hyracks.api.dataflow.value.ITypeTraits;
 import org.apache.hyracks.api.io.FileReference;
+import org.apache.hyracks.data.std.accessors.IntegerBinaryComparatorFactory;
 import org.apache.hyracks.data.std.accessors.PointableBinaryComparatorFactory;
 import org.apache.hyracks.data.std.primitive.IntegerPointable;
 import org.apache.hyracks.data.std.primitive.UTF8StringPointable;
@@ -57,7 +58,7 @@ public class OnDiskInvertedIndexLifecycleTest extends AbstractIndexLifecycleTest
                 new IBinaryComparatorFactory[] { PointableBinaryComparatorFactory.of(UTF8StringPointable.FACTORY) };
         ITypeTraits[] invListTypeTraits = new ITypeTraits[] { IntegerPointable.TYPE_TRAITS };
         IBinaryComparatorFactory[] invListCmpFactories =
-                new IBinaryComparatorFactory[] { PointableBinaryComparatorFactory.of(IntegerPointable.FACTORY) };
+                new IBinaryComparatorFactory[] { IntegerBinaryComparatorFactory.INSTANCE };
         IInvertedListBuilder invListBuilder = new FixedSizeElementInvertedListBuilder(invListTypeTraits);
         FileReference btreeFile = harness.getIOManager()
                 .resolveAbsolutePath(harness.getInvListsFileRef().getFile().getAbsolutePath() + "_btree");
diff --git a/hyracks-fullstack/hyracks/hyracks-tests/hyracks-storage-am-lsm-rtree-test/src/test/java/org/apache/hyracks/storage/am/lsm/rtree/AbstractLSMRTreeExamplesTest.java b/hyracks-fullstack/hyracks/hyracks-tests/hyracks-storage-am-lsm-rtree-test/src/test/java/org/apache/hyracks/storage/am/lsm/rtree/AbstractLSMRTreeExamplesTest.java
index e354ab8..39fb98f 100644
--- a/hyracks-fullstack/hyracks/hyracks-tests/hyracks-storage-am-lsm-rtree-test/src/test/java/org/apache/hyracks/storage/am/lsm/rtree/AbstractLSMRTreeExamplesTest.java
+++ b/hyracks-fullstack/hyracks/hyracks-tests/hyracks-storage-am-lsm-rtree-test/src/test/java/org/apache/hyracks/storage/am/lsm/rtree/AbstractLSMRTreeExamplesTest.java
@@ -24,7 +24,7 @@ import org.apache.hyracks.api.dataflow.value.ISerializerDeserializer;
 import org.apache.hyracks.api.dataflow.value.ITypeTraits;
 import org.apache.hyracks.api.exceptions.ErrorCode;
 import org.apache.hyracks.api.exceptions.HyracksDataException;
-import org.apache.hyracks.data.std.accessors.PointableBinaryComparatorFactory;
+import org.apache.hyracks.data.std.accessors.IntegerBinaryComparatorFactory;
 import org.apache.hyracks.data.std.primitive.IntegerPointable;
 import org.apache.hyracks.dataflow.common.comm.io.ArrayTupleBuilder;
 import org.apache.hyracks.dataflow.common.comm.io.ArrayTupleReference;
@@ -68,10 +68,10 @@ public abstract class AbstractLSMRTreeExamplesTest extends AbstractRTreeExamples
         // Declare RTree keys.
         int rtreeKeyFieldCount = 4;
         IBinaryComparatorFactory[] rtreeCmpFactories = new IBinaryComparatorFactory[rtreeKeyFieldCount];
-        rtreeCmpFactories[0] = PointableBinaryComparatorFactory.of(IntegerPointable.FACTORY);
-        rtreeCmpFactories[1] = PointableBinaryComparatorFactory.of(IntegerPointable.FACTORY);
-        rtreeCmpFactories[2] = PointableBinaryComparatorFactory.of(IntegerPointable.FACTORY);
-        rtreeCmpFactories[3] = PointableBinaryComparatorFactory.of(IntegerPointable.FACTORY);
+        rtreeCmpFactories[0] = IntegerBinaryComparatorFactory.INSTANCE;
+        rtreeCmpFactories[1] = IntegerBinaryComparatorFactory.INSTANCE;
+        rtreeCmpFactories[2] = IntegerBinaryComparatorFactory.INSTANCE;
+        rtreeCmpFactories[3] = IntegerBinaryComparatorFactory.INSTANCE;
 
         // Declare BTree keys, this will only be used for LSMRTree
         int btreeKeyFieldCount;
@@ -81,7 +81,7 @@ public abstract class AbstractLSMRTreeExamplesTest extends AbstractRTreeExamples
             //Parameters look different for LSM RTREE from LSM RTREE WITH ANTI MATTER TUPLES
             btreeKeyFieldCount = 1;
             btreeCmpFactories = new IBinaryComparatorFactory[btreeKeyFieldCount];
-            btreeCmpFactories[0] = PointableBinaryComparatorFactory.of(IntegerPointable.FACTORY);
+            btreeCmpFactories[0] = IntegerBinaryComparatorFactory.INSTANCE;
             btreeFields = new int[btreeKeyFieldCount];
             for (int i = 0; i < btreeKeyFieldCount; i++) {
                 btreeFields[i] = rtreeKeyFieldCount + i;
@@ -90,12 +90,12 @@ public abstract class AbstractLSMRTreeExamplesTest extends AbstractRTreeExamples
         } else {
             btreeKeyFieldCount = 6;
             btreeCmpFactories = new IBinaryComparatorFactory[btreeKeyFieldCount];
-            btreeCmpFactories[0] = PointableBinaryComparatorFactory.of(IntegerPointable.FACTORY);
-            btreeCmpFactories[1] = PointableBinaryComparatorFactory.of(IntegerPointable.FACTORY);
-            btreeCmpFactories[2] = PointableBinaryComparatorFactory.of(IntegerPointable.FACTORY);
-            btreeCmpFactories[3] = PointableBinaryComparatorFactory.of(IntegerPointable.FACTORY);
-            btreeCmpFactories[4] = PointableBinaryComparatorFactory.of(IntegerPointable.FACTORY);
-            btreeCmpFactories[5] = PointableBinaryComparatorFactory.of(IntegerPointable.FACTORY);
+            btreeCmpFactories[0] = IntegerBinaryComparatorFactory.INSTANCE;
+            btreeCmpFactories[1] = IntegerBinaryComparatorFactory.INSTANCE;
+            btreeCmpFactories[2] = IntegerBinaryComparatorFactory.INSTANCE;
+            btreeCmpFactories[3] = IntegerBinaryComparatorFactory.INSTANCE;
+            btreeCmpFactories[4] = IntegerBinaryComparatorFactory.INSTANCE;
+            btreeCmpFactories[5] = IntegerBinaryComparatorFactory.INSTANCE;
         }
 
         // create value providers
@@ -104,8 +104,7 @@ public abstract class AbstractLSMRTreeExamplesTest extends AbstractRTreeExamples
 
         int[] rtreeFields = { 0, 1, 2, 3, 4 };
         ITypeTraits[] filterTypeTraits = { IntegerPointable.TYPE_TRAITS };
-        IBinaryComparatorFactory[] filterCmpFactories =
-                { PointableBinaryComparatorFactory.of(IntegerPointable.FACTORY) };
+        IBinaryComparatorFactory[] filterCmpFactories = { IntegerBinaryComparatorFactory.INSTANCE };
         int[] filterFields = { 5 };
 
         ITreeIndex treeIndex = createTreeIndex(typeTraits, rtreeCmpFactories, btreeCmpFactories, valueProviderFactories,
diff --git a/hyracks-fullstack/hyracks/hyracks-tests/hyracks-storage-am-rtree-test/src/test/java/org/apache/hyracks/storage/am/rtree/RTreeSearchCursorTest.java b/hyracks-fullstack/hyracks/hyracks-tests/hyracks-storage-am-rtree-test/src/test/java/org/apache/hyracks/storage/am/rtree/RTreeSearchCursorTest.java
index bc1a2c3..faf0693 100644
--- a/hyracks-fullstack/hyracks/hyracks-tests/hyracks-storage-am-rtree-test/src/test/java/org/apache/hyracks/storage/am/rtree/RTreeSearchCursorTest.java
+++ b/hyracks-fullstack/hyracks/hyracks-tests/hyracks-storage-am-rtree-test/src/test/java/org/apache/hyracks/storage/am/rtree/RTreeSearchCursorTest.java
@@ -27,7 +27,7 @@ import org.apache.hyracks.api.dataflow.value.ISerializerDeserializer;
 import org.apache.hyracks.api.dataflow.value.ITypeTraits;
 import org.apache.hyracks.api.exceptions.ErrorCode;
 import org.apache.hyracks.api.exceptions.HyracksDataException;
-import org.apache.hyracks.data.std.accessors.PointableBinaryComparatorFactory;
+import org.apache.hyracks.data.std.accessors.IntegerBinaryComparatorFactory;
 import org.apache.hyracks.data.std.primitive.IntegerPointable;
 import org.apache.hyracks.dataflow.common.comm.io.ArrayTupleBuilder;
 import org.apache.hyracks.dataflow.common.comm.io.ArrayTupleReference;
@@ -71,10 +71,8 @@ public class RTreeSearchCursorTest extends AbstractRTreeTest {
             IntegerSerializerDeserializer.INSTANCE, IntegerSerializerDeserializer.INSTANCE };
     public static final int KEY_FIELD_COUNT = 4;
     public static final IBinaryComparatorFactory[] CMP_FACTORIES =
-            { PointableBinaryComparatorFactory.of(IntegerPointable.FACTORY),
-                    PointableBinaryComparatorFactory.of(IntegerPointable.FACTORY),
-                    PointableBinaryComparatorFactory.of(IntegerPointable.FACTORY),
-                    PointableBinaryComparatorFactory.of(IntegerPointable.FACTORY) };
+            { IntegerBinaryComparatorFactory.INSTANCE, IntegerBinaryComparatorFactory.INSTANCE,
+                    IntegerBinaryComparatorFactory.INSTANCE, IntegerBinaryComparatorFactory.INSTANCE };
     public static final IPrimitiveValueProviderFactory[] VALUE_PROVIDER_FACTORY =
             RTreeUtils.createPrimitiveValueProviderFactories(CMP_FACTORIES.length, IntegerPointable.FACTORY);
     public static final RTreeTypeAwareTupleWriterFactory TUPLE_WRITER_FACTORY =