diff --git a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/AbstractArraySliceEval.java b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/ArraySliceEvaluator.java
similarity index 90%
rename from asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/AbstractArraySliceEval.java
rename to asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/ArraySliceEvaluator.java
index 036447a..c907720 100644
--- a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/AbstractArraySliceEval.java
+++ b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/ArraySliceEvaluator.java
@@ -75,32 +75,31 @@
  * </pre>
  */
 
-public abstract class AbstractArraySliceEval extends AbstractScalarEval {
+class ArraySliceEvaluator extends AbstractScalarEval {
+
     // List type
     private final IAType inputListType;
 
     // Storage
-    private final ArrayBackedValueStorage storage = new ArrayBackedValueStorage();
+    private final ArrayBackedValueStorage resultStorage = new ArrayBackedValueStorage();
 
-    // Evaluators
+    // Evaluators and pointables
     private final IScalarEvaluator listEval;
     private final IScalarEvaluator startPositionEval;
-    private final IScalarEvaluator endPositionEval;
-
-    // Pointables
+    private IScalarEvaluator endPositionEval;
     private final IPointable listPointable = new VoidPointable();
     private final IPointable startPositionPointable = new VoidPointable();
-    private final IPointable endPositionPointable = new VoidPointable();
+    private IPointable endPositionPointable;
 
     // Accessors
     private final ListAccessor listAccessor = new ListAccessor();
 
     // List Builders
-    private IAsterixListBuilder orderedListBuilder = new OrderedListBuilder();
-    private IAsterixListBuilder unorderedListBuilder = new UnorderedListBuilder();
+    private final IAsterixListBuilder orderedListBuilder = new OrderedListBuilder();
+    private final IAsterixListBuilder unorderedListBuilder = new UnorderedListBuilder();
 
     // Constructor
-    public AbstractArraySliceEval(IScalarEvaluatorFactory[] args, IHyracksTaskContext ctx, SourceLocation sourceLoc,
+    ArraySliceEvaluator(IScalarEvaluatorFactory[] argEvalFactories, IHyracksTaskContext ctx, SourceLocation sourceLoc,
             FunctionIdentifier functionIdentifier, IAType inputListType) throws HyracksDataException {
         // Source location
         super(sourceLoc, functionIdentifier);
@@ -109,20 +108,18 @@
         this.inputListType = inputListType;
 
         // Evaluators
-        listEval = args[0].createScalarEvaluator(ctx);
-        startPositionEval = args[1].createScalarEvaluator(ctx);
+        listEval = argEvalFactories[0].createScalarEvaluator(ctx);
+        startPositionEval = argEvalFactories[1].createScalarEvaluator(ctx);
 
         // Check for optional parameter
-        endPositionEval = getEndPositionEval(args, ctx);
+        if (argEvalFactories.length > 2) {
+            endPositionEval = argEvalFactories[2].createScalarEvaluator(ctx);
+            endPositionPointable = new VoidPointable();
+        }
     }
 
-    protected abstract IScalarEvaluator getEndPositionEval(IScalarEvaluatorFactory[] args, IHyracksTaskContext ctx)
-            throws HyracksDataException;
-
     @Override
     public void evaluate(IFrameTupleReference tuple, IPointable result) throws HyracksDataException {
-        // Reset storage
-        storage.reset();
 
         // Evaluate
         listEval.evaluate(tuple, listPointable);
@@ -231,18 +228,18 @@
         try {
             // Create the subset list based on the positions
             for (int i = startPositionValue; i < endPositionValue; i++) {
-                storage.reset();
-                listAccessor.writeItem(i, storage.getDataOutput());
-                listBuilder.addItem(storage);
+                resultStorage.reset();
+                listAccessor.writeItem(i, resultStorage.getDataOutput());
+                listBuilder.addItem(resultStorage);
             }
         } catch (IOException ex) {
             throw HyracksDataException.create(ex);
         }
 
         // Final result
-        storage.reset();
-        listBuilder.write(storage.getDataOutput(), true);
-        result.set(storage);
+        resultStorage.reset();
+        listBuilder.write(resultStorage.getDataOutput(), true);
+        result.set(resultStorage);
     }
 
     // Get the value
diff --git a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/ArraySliceWithEndPositionDescriptor.java b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/ArraySliceWithEndPositionDescriptor.java
index 81833b6..04e93dd 100644
--- a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/ArraySliceWithEndPositionDescriptor.java
+++ b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/ArraySliceWithEndPositionDescriptor.java
@@ -32,7 +32,6 @@
 import org.apache.hyracks.algebricks.runtime.base.IScalarEvaluatorFactory;
 import org.apache.hyracks.api.context.IHyracksTaskContext;
 import org.apache.hyracks.api.exceptions.HyracksDataException;
-import org.apache.hyracks.api.exceptions.SourceLocation;
 
 /**
  * array_slice(array, start, end) This function takes 3 arguments, {@code array}, {@code start} and {@code end} and
@@ -75,24 +74,8 @@
 
             @Override
             public IScalarEvaluator createScalarEvaluator(final IHyracksTaskContext ctx) throws HyracksDataException {
-                return new ArraySliceEval(args, ctx, sourceLoc);
+                return new ArraySliceEvaluator(args, ctx, sourceLoc, getIdentifier(), inputListType);
             }
         };
     }
-
-    public class ArraySliceEval extends AbstractArraySliceEval {
-
-        // Constructor
-        public ArraySliceEval(IScalarEvaluatorFactory[] args, IHyracksTaskContext ctx, SourceLocation sourceLoc)
-                throws HyracksDataException {
-            super(args, ctx, sourceLoc, ArraySliceWithEndPositionDescriptor.this.getIdentifier(), inputListType);
-        }
-
-        // Return end position evaluator
-        @Override
-        protected IScalarEvaluator getEndPositionEval(IScalarEvaluatorFactory[] args, IHyracksTaskContext ctx)
-                throws HyracksDataException {
-            return args[2].createScalarEvaluator(ctx);
-        }
-    }
 }
diff --git a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/ArraySliceWithoutEndPositionDescriptor.java b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/ArraySliceWithoutEndPositionDescriptor.java
index 3fab75b..7a3889f 100644
--- a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/ArraySliceWithoutEndPositionDescriptor.java
+++ b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/ArraySliceWithoutEndPositionDescriptor.java
@@ -32,7 +32,6 @@
 import org.apache.hyracks.algebricks.runtime.base.IScalarEvaluatorFactory;
 import org.apache.hyracks.api.context.IHyracksTaskContext;
 import org.apache.hyracks.api.exceptions.HyracksDataException;
-import org.apache.hyracks.api.exceptions.SourceLocation;
 
 /**
  * array_slice(array, start) This function takes 2 arguments, {@code array} and {@code start} and returns
@@ -75,23 +74,8 @@
 
             @Override
             public IScalarEvaluator createScalarEvaluator(final IHyracksTaskContext ctx) throws HyracksDataException {
-                return new ArraySliceEval(args, ctx, sourceLoc);
+                return new ArraySliceEvaluator(args, ctx, sourceLoc, getIdentifier(), inputListType);
             }
         };
     }
-
-    public class ArraySliceEval extends AbstractArraySliceEval {
-
-        // Constructor
-        public ArraySliceEval(IScalarEvaluatorFactory[] args, IHyracksTaskContext ctx, SourceLocation sourceLoc)
-                throws HyracksDataException {
-            super(args, ctx, sourceLoc, ArraySliceWithoutEndPositionDescriptor.this.getIdentifier(), inputListType);
-        }
-
-        // Return null, no end position
-        @Override
-        protected IScalarEvaluator getEndPositionEval(IScalarEvaluatorFactory[] args, IHyracksTaskContext ctx) {
-            return null;
-        }
-    }
 }
