diff --git a/hyracks-fullstack/hyracks/hyracks-api/src/main/java/org/apache/hyracks/api/dataflow/ProfiledFrameWriter.java b/hyracks-fullstack/hyracks/hyracks-api/src/main/java/org/apache/hyracks/api/dataflow/ProfiledFrameWriter.java
index 6384e49..dc53bca 100644
--- a/hyracks-fullstack/hyracks/hyracks-api/src/main/java/org/apache/hyracks/api/dataflow/ProfiledFrameWriter.java
+++ b/hyracks-fullstack/hyracks/hyracks-api/src/main/java/org/apache/hyracks/api/dataflow/ProfiledFrameWriter.java
@@ -30,34 +30,24 @@
 import org.apache.hyracks.api.job.profiling.IStatsCollector;
 import org.apache.hyracks.api.job.profiling.OperatorStats;
 import org.apache.hyracks.api.job.profiling.counters.ICounter;
-import org.apache.hyracks.api.util.HyracksConsumer;
 import org.apache.hyracks.api.util.HyracksRunnable;
+import org.apache.hyracks.api.util.HyracksThrowingConsumer;
 import org.apache.hyracks.util.IntSerDeUtils;
 
 public class ProfiledFrameWriter implements IFrameWriter {
 
     // The downstream data consumer of this writer.
     private final IFrameWriter writer;
-    final ICounter timeCounter;
-    final ICounter tupleCounter;
-    final IStatsCollector collector;
-    final IOperatorStats stats;
-    final IOperatorStats parentStats;
-
+    private final ICounter tupleCounter;
+    private final IOperatorStats parentStats;
     private int minSz = Integer.MAX_VALUE;
     private int maxSz = -1;
     private long avgSz;
-    final String name;
-    public ICounter totalTime;
+    private ICounter totalTime;
 
-    public ProfiledFrameWriter(IFrameWriter writer, IStatsCollector collector, String name, IOperatorStats stats,
-            IOperatorStats parentStats) {
+    public ProfiledFrameWriter(IFrameWriter writer, IOperatorStats parentStats) {
         this.writer = writer;
-        this.collector = collector;
-        this.name = name;
-        this.stats = stats;
         this.parentStats = parentStats;
-        this.timeCounter = stats.getTimeCounter();
         this.tupleCounter = parentStats != null ? parentStats.getTupleCounter() : null;
         this.totalTime = new Counter("totalTime");
     }
@@ -72,7 +62,7 @@
         }
     }
 
-    private void timeMethod(HyracksConsumer<ByteBuffer> c, ByteBuffer buffer) throws HyracksDataException {
+    private void timeMethod(HyracksThrowingConsumer<ByteBuffer> c, ByteBuffer buffer) throws HyracksDataException {
         long nt = 0;
         try {
             nt = System.nanoTime();
@@ -152,7 +142,7 @@
             IStatsCollector statsCollector = ctx.getStatsCollector();
             IOperatorStats stats = new OperatorStats(name);
             statsCollector.add(stats);
-            return new ProfiledFrameWriter(writer, ctx.getStatsCollector(), name, stats, null);
+            return new ProfiledFrameWriter(writer, null);
 
         } else
             return writer;
diff --git a/hyracks-fullstack/hyracks/hyracks-api/src/main/java/org/apache/hyracks/api/dataflow/ProfiledOperatorNodePushable.java b/hyracks-fullstack/hyracks/hyracks-api/src/main/java/org/apache/hyracks/api/dataflow/ProfiledOperatorNodePushable.java
index facf049..bde5611 100644
--- a/hyracks-fullstack/hyracks/hyracks-api/src/main/java/org/apache/hyracks/api/dataflow/ProfiledOperatorNodePushable.java
+++ b/hyracks-fullstack/hyracks/hyracks-api/src/main/java/org/apache/hyracks/api/dataflow/ProfiledOperatorNodePushable.java
@@ -34,25 +34,19 @@
 
 public class ProfiledOperatorNodePushable implements IOperatorNodePushable {
 
-    IOperatorNodePushable op;
-    ActivityId acId;
-    Map<Integer, ProfiledFrameWriter> inputs;
-    Map<Integer, ProfiledOperatorNodePushable> parents;
+    private final IOperatorNodePushable op;
+    private final Map<Integer, ProfiledFrameWriter> inputs;
+    private final Map<Integer, ProfiledOperatorNodePushable> parents;
+    private final Map<Integer, ProfiledFrameWriter> outputs;
+    private final IOperatorStats stats;
+    private final ICounter totalTime;
 
-    Map<Integer, ProfiledFrameWriter> outputs;
-    IOperatorStats stats;
-    IStatsCollector collector;
-
-    ICounter totalTime;
-
-    ProfiledOperatorNodePushable(IOperatorNodePushable op, ActivityId acId, IStatsCollector collector,
-            IOperatorStats stats, ProfiledOperatorNodePushable parentOp) {
+    ProfiledOperatorNodePushable(IOperatorNodePushable op, IOperatorStats stats,
+            ProfiledOperatorNodePushable parentOp) {
         this.stats = stats;
-        this.collector = collector;
         this.parents = new HashMap<>();
         parents.put(0, parentOp);
         this.op = op;
-        this.acId = acId;
         inputs = new HashMap<>();
         outputs = new HashMap<>();
         this.totalTime = new Counter("totalTime");
@@ -65,15 +59,15 @@
 
     @Override
     public void deinitialize() throws HyracksDataException {
-        long unNestTime = totalTime.get();
+        long ownTime = totalTime.get();
         for (ProfiledFrameWriter i : inputs.values()) {
-            unNestTime += i.getTotalTime();
+            ownTime += i.getTotalTime();
         }
         for (ProfiledFrameWriter w : outputs.values()) {
-            unNestTime -= w.getTotalTime();
+            ownTime -= w.getTotalTime();
         }
         op.deinitialize();
-        stats.getTimeCounter().set(unNestTime);
+        stats.getTimeCounter().set(ownTime);
     }
 
     @Override
@@ -95,8 +89,7 @@
     public IFrameWriter getInputFrameWriter(int index) {
         if (inputs.get(index) == null) {
             IOperatorStats parentStats = parents.get(index) == null ? null : parents.get(index).getStats();
-            ProfiledFrameWriter pfw = new ProfiledFrameWriter(op.getInputFrameWriter(index), collector,
-                    acId.toString() + "-" + op.getDisplayName(), stats, parentStats);
+            ProfiledFrameWriter pfw = new ProfiledFrameWriter(op.getInputFrameWriter(index), parentStats);
             inputs.put(index, pfw);
             return pfw;
         } else {
@@ -127,7 +120,7 @@
             ((IIntrospectingOperator) op).setOperatorStats(stats);
         }
         if (!(op instanceof ProfiledOperatorNodePushable) && !(op instanceof SuperActivityOperatorNodePushable)) {
-            return new ProfiledOperatorNodePushable(op, acId, ctx.getStatsCollector(), stats, source);
+            return new ProfiledOperatorNodePushable(op, stats, source);
         }
         return op;
     }
diff --git a/hyracks-fullstack/hyracks/hyracks-api/src/main/java/org/apache/hyracks/api/util/HyracksConsumer.java b/hyracks-fullstack/hyracks/hyracks-api/src/main/java/org/apache/hyracks/api/util/HyracksConsumer.java
deleted file mode 100644
index c5abb5e..0000000
--- a/hyracks-fullstack/hyracks/hyracks-api/src/main/java/org/apache/hyracks/api/util/HyracksConsumer.java
+++ /dev/null
@@ -1,26 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.hyracks.api.util;
-
-import org.apache.hyracks.api.exceptions.HyracksDataException;
-
-@FunctionalInterface
-public interface HyracksConsumer<T> {
-    void accept(final T elem) throws HyracksDataException;
-}
