http://git-wip-us.apache.org/repos/asf/systemml/blob/75b93f26/src/main/java/org/apache/sysml/runtime/instructions/cp/ComputationCPInstruction.java
----------------------------------------------------------------------
diff --git 
a/src/main/java/org/apache/sysml/runtime/instructions/cp/ComputationCPInstruction.java
 
b/src/main/java/org/apache/sysml/runtime/instructions/cp/ComputationCPInstruction.java
index 572290d..1e71e63 100644
--- 
a/src/main/java/org/apache/sysml/runtime/instructions/cp/ComputationCPInstruction.java
+++ 
b/src/main/java/org/apache/sysml/runtime/instructions/cp/ComputationCPInstruction.java
@@ -24,21 +24,21 @@ import org.apache.sysml.runtime.matrix.operators.Operator;
 
 public abstract class ComputationCPInstruction extends CPInstruction {
 
-       public CPOperand output;
-       public CPOperand input1, input2, input3;
+       public final CPOperand output;
+       public final CPOperand input1, input2, input3;
 
-       protected ComputationCPInstruction(Operator op, CPOperand in1, 
CPOperand in2, CPOperand out, String opcode,
+       protected ComputationCPInstruction(CPType type, Operator op, CPOperand 
in1, CPOperand in2, CPOperand out, String opcode,
                        String istr) {
-               super(op, opcode, istr);
+               super(type, op, opcode, istr);
                input1 = in1;
                input2 = in2;
                input3 = null;
                output = out;
        }
 
-       protected ComputationCPInstruction(Operator op, CPOperand in1, 
CPOperand in2, CPOperand in3, CPOperand out,
+       protected ComputationCPInstruction(CPType type, Operator op, CPOperand 
in1, CPOperand in2, CPOperand in3, CPOperand out,
                        String opcode, String istr) {
-               super(op, opcode, istr);
+               super(type, op, opcode, istr);
                input1 = in1;
                input2 = in2;
                input3 = in3;

http://git-wip-us.apache.org/repos/asf/systemml/blob/75b93f26/src/main/java/org/apache/sysml/runtime/instructions/cp/ConvolutionCPInstruction.java
----------------------------------------------------------------------
diff --git 
a/src/main/java/org/apache/sysml/runtime/instructions/cp/ConvolutionCPInstruction.java
 
b/src/main/java/org/apache/sysml/runtime/instructions/cp/ConvolutionCPInstruction.java
index 36422d9..60ca720 100644
--- 
a/src/main/java/org/apache/sysml/runtime/instructions/cp/ConvolutionCPInstruction.java
+++ 
b/src/main/java/org/apache/sysml/runtime/instructions/cp/ConvolutionCPInstruction.java
@@ -28,97 +28,74 @@ import org.apache.sysml.hops.OptimizerUtils;
 import org.apache.sysml.runtime.DMLRuntimeException;
 import org.apache.sysml.runtime.controlprogram.context.ExecutionContext;
 import org.apache.sysml.runtime.functionobjects.KahanPlus;
-import org.apache.sysml.runtime.functionobjects.SwapIndex;
 import org.apache.sysml.runtime.instructions.InstructionUtils;
 import org.apache.sysml.runtime.matrix.data.ConvolutionParameters;
 import org.apache.sysml.runtime.matrix.data.LibMatrixDNN;
 import org.apache.sysml.runtime.matrix.data.LibMatrixNative;
 import org.apache.sysml.runtime.matrix.data.MatrixBlock;
 import org.apache.sysml.runtime.matrix.data.SparseBlock;
-import org.apache.sysml.runtime.matrix.operators.ReorgOperator;
 import org.apache.sysml.runtime.util.ConvolutionUtils;
 import org.apache.sysml.utils.NativeHelper;
 
 public class ConvolutionCPInstruction extends UnaryCPInstruction {
-       private CPOperand _in2;
-       private CPOperand _in3;
-       private ArrayList<CPOperand> _input_shape;
-       private ArrayList<CPOperand> _filter_shape;
-       private ArrayList<CPOperand> _stride = new ArrayList<>();
-       private ArrayList<CPOperand> _padding = new ArrayList<>();
-       private int _numThreads = -1;   private double 
_intermediateMemoryBudget = 0;
        private static final Log LOG = 
LogFactory.getLog(ConvolutionCPInstruction.class.getName());
        private static boolean warnedUnderUtilitization = false;
        
+       private final CPOperand _in2;
+       private final CPOperand _in3;
+       private final ArrayList<CPOperand> _input_shape;
+       private final ArrayList<CPOperand> _filter_shape;
+       private final ArrayList<CPOperand> _stride;
+       private final ArrayList<CPOperand> _padding;
+       private final int _numThreads;
+       private final double _intermediateMemoryBudget;
+       
+       public ConvolutionCPInstruction(CPOperand in, CPOperand in2, CPOperand 
in3, CPOperand out, 
+                       ArrayList<CPOperand> stride, ArrayList<CPOperand> 
padding, ArrayList<CPOperand> input_shape,
+                       ArrayList<CPOperand> filter_shape, int numThreads, 
double intermediateMemoryBudget, String opcode, String istr) {
+               super(CPType.Convolution, null, in, out, opcode, istr);
+               _in2 = in2;
+               _in3 = in3;
+               _stride = stride;
+               _padding = padding;
+               _input_shape = input_shape;
+               _filter_shape = filter_shape;
+               _numThreads = numThreads;
+               _intermediateMemoryBudget = intermediateMemoryBudget;
+       }
+       
        public ConvolutionCPInstruction(CPOperand in, CPOperand in2, CPOperand 
out, String opcode, String istr, int numThreads, double 
intermediateMemoryBudget) throws DMLRuntimeException {
-               super(new ReorgOperator(SwapIndex.getSwapIndexFnObject()), in, 
out,
-                               opcode, istr);
+               this(in, in2, null, out, null, null, null, null, numThreads, 
intermediateMemoryBudget, opcode, istr);
                if( !(opcode.equals("bias_add") || 
opcode.equals("relu_backward") || opcode.equals("bias_multiply") ) ) {
                        throw new DMLRuntimeException("Incorrect usage. 
Expected the opcode to be bias_add or bias_multiply or relu_backward, but found 
" + opcode);
                }
-               _in2 = in2;
-               _cptype = CPINSTRUCTION_TYPE.Convolution;
-               _numThreads = numThreads;
-               _intermediateMemoryBudget = intermediateMemoryBudget;
        }
        
        public ConvolutionCPInstruction(CPOperand in, CPOperand in2, CPOperand 
in3, CPOperand out, String opcode, String istr, int numThreads, double 
intermediateMemoryBudget) throws DMLRuntimeException {
-               super(new ReorgOperator(SwapIndex.getSwapIndexFnObject()), in, 
out,
-                               opcode, istr);
+               this(in, in2, in3, out, null, null, null, null, numThreads, 
intermediateMemoryBudget, opcode, istr);
                if( !opcode.equals("channel_sums") ) {
                        throw new DMLRuntimeException("Incorrect usage. 
Expected the opcode to be channel_sums, but found " + opcode);
                }
-               _in2 = in2;
-               _in3 = in3;
-               _cptype = CPINSTRUCTION_TYPE.Convolution;
-               _numThreads = numThreads;
-               _intermediateMemoryBudget = intermediateMemoryBudget;
        }
 
        private ConvolutionCPInstruction(CPOperand in, CPOperand out, String 
opcode, String istr,
                        ArrayList<CPOperand> stride, ArrayList<CPOperand> 
padding, ArrayList<CPOperand> input_shape,
                        ArrayList<CPOperand> filter_shape, int numThreads, 
double intermediateMemoryBudget) {
-               super(new ReorgOperator(SwapIndex.getSwapIndexFnObject()), in, 
out, opcode, istr);
-               _cptype = CPINSTRUCTION_TYPE.Convolution;
-               _stride = stride;
-               _padding = padding;
-               _input_shape = input_shape;
-               _filter_shape = filter_shape;
-               _numThreads = numThreads;
-               _intermediateMemoryBudget = intermediateMemoryBudget;
+               this(in, null, null, out, stride, padding, input_shape, 
filter_shape, numThreads, intermediateMemoryBudget, opcode, istr);
        }
        
        public ConvolutionCPInstruction(CPOperand in, CPOperand in2, CPOperand 
out, String opcode,
                        String istr, ArrayList<CPOperand> stride,
                        ArrayList<CPOperand> padding, ArrayList<CPOperand> 
input_shape,
                        ArrayList<CPOperand> filter_shape, int numThreads, 
double intermediateMemoryBudget) {
-               super(new ReorgOperator(SwapIndex.getSwapIndexFnObject()), in, 
out,
-                               opcode, istr);
-               _in2 = in2;
-               _cptype = CPINSTRUCTION_TYPE.Convolution;
-               _stride = stride;
-               _padding = padding;
-               _input_shape = input_shape;
-               _filter_shape = filter_shape;
-               _numThreads = numThreads;
-               _intermediateMemoryBudget = intermediateMemoryBudget;
+               this(in, in2, null, out, stride, padding, input_shape, 
filter_shape, numThreads, intermediateMemoryBudget, opcode, istr);
        }
        
        public ConvolutionCPInstruction(CPOperand in, CPOperand in2, CPOperand 
in3, CPOperand out, String opcode,
                        String istr, ArrayList<CPOperand> stride,
                        ArrayList<CPOperand> padding, ArrayList<CPOperand> 
input_shape,
                        ArrayList<CPOperand> filter_shape, int numThreads, 
double intermediateMemoryBudget) {
-               super(new ReorgOperator(SwapIndex.getSwapIndexFnObject()), in, 
out,
-                               opcode, istr);
-               _in2 = in2;
-               _in3 = in3;
-               _cptype = CPINSTRUCTION_TYPE.Convolution;
-               _stride = stride;
-               _padding = padding;
-               _input_shape = input_shape;
-               _filter_shape = filter_shape;
-               _numThreads = numThreads;
-               _intermediateMemoryBudget = intermediateMemoryBudget;
+               this(in, in2, in3, out, stride, padding, input_shape, 
filter_shape, numThreads, intermediateMemoryBudget, opcode, istr);
        }
 
        public static ConvolutionCPInstruction parseInstruction(String str)

http://git-wip-us.apache.org/repos/asf/systemml/blob/75b93f26/src/main/java/org/apache/sysml/runtime/instructions/cp/CovarianceCPInstruction.java
----------------------------------------------------------------------
diff --git 
a/src/main/java/org/apache/sysml/runtime/instructions/cp/CovarianceCPInstruction.java
 
b/src/main/java/org/apache/sysml/runtime/instructions/cp/CovarianceCPInstruction.java
index d7eb24f..9457c65 100644
--- 
a/src/main/java/org/apache/sysml/runtime/instructions/cp/CovarianceCPInstruction.java
+++ 
b/src/main/java/org/apache/sysml/runtime/instructions/cp/CovarianceCPInstruction.java
@@ -33,14 +33,12 @@ public class CovarianceCPInstruction extends 
BinaryCPInstruction {
 
        private CovarianceCPInstruction(Operator op, CPOperand in1, CPOperand 
in2, CPOperand out, String opcode,
                        String istr) {
-               super(op, in1, in2, out, opcode, istr);
-               _cptype = CPINSTRUCTION_TYPE.AggregateBinary;
+               super(CPType.AggregateBinary, op, in1, in2, out, opcode, istr);
        }
 
        private CovarianceCPInstruction(Operator op, CPOperand in1, CPOperand 
in2, CPOperand in3, CPOperand out,
                        String opcode, String istr) {
-               super(op, in1, in2, in3, out, opcode, istr);
-               _cptype = CPINSTRUCTION_TYPE.AggregateBinary;
+               super(CPType.AggregateBinary, op, in1, in2, in3, out, opcode, 
istr);
        }
 
        public static CovarianceCPInstruction parseInstruction( String str ) 

http://git-wip-us.apache.org/repos/asf/systemml/blob/75b93f26/src/main/java/org/apache/sysml/runtime/instructions/cp/DataGenCPInstruction.java
----------------------------------------------------------------------
diff --git 
a/src/main/java/org/apache/sysml/runtime/instructions/cp/DataGenCPInstruction.java
 
b/src/main/java/org/apache/sysml/runtime/instructions/cp/DataGenCPInstruction.java
index 46f2116..236f2ae 100644
--- 
a/src/main/java/org/apache/sysml/runtime/instructions/cp/DataGenCPInstruction.java
+++ 
b/src/main/java/org/apache/sysml/runtime/instructions/cp/DataGenCPInstruction.java
@@ -36,30 +36,24 @@ public class DataGenCPInstruction extends 
UnaryCPInstruction {
 
        private DataGenMethod method = DataGenMethod.INVALID;
 
-       private long rows;
-       private long cols;
-       private int rowsInBlock;
-       private int colsInBlock;
-       private double minValue;
-       private double maxValue;
-       private double sparsity;
-       private String pdf, pdfParams;
-       private long seed = 0;
+       private final long rows, cols;
+       private final int rowsInBlock, colsInBlock;
+       private final double minValue, maxValue, sparsity;
+       private final String pdf, pdfParams;
+       private final long seed;
 
        // sequence specific attributes
-       private double seq_from;
-       private double seq_to;
-       private double seq_incr;
+       private final double seq_from, seq_to, seq_incr;
 
        // sample specific attributes
-       private boolean replace;
-       private int numThreads = -1;
-
-       private DataGenCPInstruction(Operator op, DataGenMethod mthd, CPOperand 
in, CPOperand out, long rows, long cols,
-                       int rpb, int cpb, double minValue, double maxValue, 
double sparsity, long seed,
-                       String probabilityDensityFunction, String pdfParams, 
int k, String opcode, String istr) {
-               super(op, in, out, opcode, istr);
+       private final boolean replace;
+       private final int numThreads;
 
+       private DataGenCPInstruction(Operator op, DataGenMethod mthd, CPOperand 
in, CPOperand out, 
+                       long rows, long cols, int rpb, int cpb, double 
minValue, double maxValue, double sparsity, long seed,
+                       String probabilityDensityFunction, String pdfParams, 
int k, 
+                       double seqFrom, double seqTo, double seqIncr, boolean 
replace, String opcode, String istr) {
+               super(CPType.Rand, op, in, out, opcode, istr);
                this.method = mthd;
                this.rows = rows;
                this.cols = cols;
@@ -70,94 +64,60 @@ public class DataGenCPInstruction extends 
UnaryCPInstruction {
                this.sparsity = sparsity;
                this.seed = seed;
                this.pdf = probabilityDensityFunction;
-               this.numThreads = k;
                this.pdfParams = pdfParams;
+               this.numThreads = k;
+               this.seq_from = seqFrom;
+               this.seq_to = seqTo;
+               this.seq_incr = seqIncr;
+               this.replace = replace;
+       }
+       
+       private DataGenCPInstruction(Operator op, DataGenMethod mthd, CPOperand 
in, CPOperand out, long rows, long cols,
+                       int rpb, int cpb, double minValue, double maxValue, 
double sparsity, long seed,
+                       String probabilityDensityFunction, String pdfParams, 
int k, String opcode, String istr) {
+               this(op, mthd, in, out, rows, cols, rpb, cpb, minValue, 
maxValue, sparsity, seed, 
+                       probabilityDensityFunction, pdfParams, k, -1, -1, -1, 
false, opcode, istr);
        }
 
        private DataGenCPInstruction(Operator op, DataGenMethod mthd, CPOperand 
in, CPOperand out, long rows, long cols,
                        int rpb, int cpb, double maxValue, boolean replace, 
long seed, String opcode, String istr) {
-               super(op, in, out, opcode, istr);
-
-               this.method = mthd;
-               this.rows = rows;
-               this.cols = cols;
-               this.rowsInBlock = rpb;
-               this.colsInBlock = cpb;
-               this.maxValue = maxValue;
-               this.replace = replace;
-               this.seed = seed;
+               this(op, mthd, in, out, rows, cols, rpb, cpb, 0, maxValue, 1.0, 
seed, 
+                       null, null, 1, -1, -1, -1, replace, opcode, istr);
        }
 
        private DataGenCPInstruction(Operator op, DataGenMethod mthd, CPOperand 
in, CPOperand out, long rows, long cols,
                        int rpb, int cpb, double seqFrom, double seqTo, double 
seqIncr, String opcode, String istr) {
-               super(op, in, out, opcode, istr);
-
-               this.method = mthd;
-               this.rows = rows;
-               this.cols = cols;
-               this.rowsInBlock = rpb;
-               this.colsInBlock = cpb;
-               this.seq_from = seqFrom;
-               this.seq_to = seqTo;
-               this.seq_incr = seqIncr;
+               this(op, mthd, in, out, rows, cols, rpb, cpb, 0, 1, 1.0, -1, 
+                       null, null, 1, seqFrom, seqTo, seqIncr, false, opcode, 
istr);
        }
 
        public long getRows() {
                return rows;
        }
 
-       public void setRows(long rows) {
-               this.rows = rows;
-       }
-
        public long getCols() {
                return cols;
        }
-
-       public void setCols(long cols) {
-               this.cols = cols;
-       }
-
        public int getRowsInBlock() {
                return rowsInBlock;
        }
 
-       public void setRowsInBlock(int rowsInBlock) {
-               this.rowsInBlock = rowsInBlock;
-       }
-
        public int getColsInBlock() {
                return colsInBlock;
        }
 
-       public void setColsInBlock(int colsInBlock) {
-               this.colsInBlock = colsInBlock;
-       }
-
        public double getMinValue() {
                return minValue;
        }
 
-       public void setMinValue(double minValue) {
-               this.minValue = minValue;
-       }
-
        public double getMaxValue() {
                return maxValue;
        }
 
-       public void setMaxValue(double maxValue) {
-               this.maxValue = maxValue;
-       }
-
        public double getSparsity() {
                return sparsity;
        }
 
-       public void setSparsity(double sparsity) {
-               this.sparsity = sparsity;
-       }
-
        public static DataGenCPInstruction parseInstruction(String str) 
                throws DMLRuntimeException 
        {
@@ -299,12 +259,12 @@ public class DataGenCPInstruction extends 
UnaryCPInstruction {
                else if ( method == DataGenMethod.SEQ ) 
                {
                        //handle default 1 to -1 for special case of from>to
-                       seq_incr = LibMatrixDatagen.updateSeqIncr(seq_from, 
seq_to, seq_incr);
+                       double lSeqIncr = 
LibMatrixDatagen.updateSeqIncr(seq_from, seq_to, seq_incr);
                        
                        if( LOG.isTraceEnabled() )
-                               LOG.trace("Process DataGenCPInstruction seq 
with seqFrom="+seq_from+", seqTo="+seq_to+", seqIncr"+seq_incr);
+                               LOG.trace("Process DataGenCPInstruction seq 
with seqFrom="+seq_from+", seqTo="+seq_to+", seqIncr"+lSeqIncr);
                        
-                       soresBlock = MatrixBlock.seqOperations(seq_from, 
seq_to, seq_incr);
+                       soresBlock = MatrixBlock.seqOperations(seq_from, 
seq_to, lSeqIncr);
                }
                else if ( method == DataGenMethod.SAMPLE ) 
                {

http://git-wip-us.apache.org/repos/asf/systemml/blob/75b93f26/src/main/java/org/apache/sysml/runtime/instructions/cp/DataPartitionCPInstruction.java
----------------------------------------------------------------------
diff --git 
a/src/main/java/org/apache/sysml/runtime/instructions/cp/DataPartitionCPInstruction.java
 
b/src/main/java/org/apache/sysml/runtime/instructions/cp/DataPartitionCPInstruction.java
index 6bb6fcd..50fad3b 100644
--- 
a/src/main/java/org/apache/sysml/runtime/instructions/cp/DataPartitionCPInstruction.java
+++ 
b/src/main/java/org/apache/sysml/runtime/instructions/cp/DataPartitionCPInstruction.java
@@ -38,12 +38,11 @@ import org.apache.sysml.runtime.matrix.operators.Operator;
 
 public class DataPartitionCPInstruction extends UnaryCPInstruction {
 
-       private PDataPartitionFormat _pformat = null;
+       private final PDataPartitionFormat _pformat;
 
        private DataPartitionCPInstruction(Operator op, CPOperand in1, 
PDataPartitionFormat pformat, CPOperand out,
                        String opcode, String istr) {
-               super(op, in1, out, opcode, istr);
-               _cptype = CPINSTRUCTION_TYPE.MMTSJ;
+               super(CPType.Partition, op, in1, out, opcode, istr);
                _pformat = pformat;
        }
 
@@ -73,7 +72,7 @@ public class DataPartitionCPInstruction extends 
UnaryCPInstruction {
                MatrixBlock mb = moIn.acquireRead();
                
                //execute operations 
-               MatrixObject moOut = (MatrixObject) 
ec.getVariable(output.getName());           
+               MatrixObject moOut = (MatrixObject) 
ec.getVariable(output.getName());
                String fname = moOut.getFileName();
                moOut.setPartitioned(_pformat, -1); //modify meta data output
                try
@@ -94,6 +93,6 @@ public class DataPartitionCPInstruction extends 
UnaryCPInstruction {
                }
                
                //release input
-               ec.releaseMatrixInput(input1.getName(), getExtendedOpcode());   
        
+               ec.releaseMatrixInput(input1.getName(), getExtendedOpcode());
        }
 }

http://git-wip-us.apache.org/repos/asf/systemml/blob/75b93f26/src/main/java/org/apache/sysml/runtime/instructions/cp/FunctionCallCPInstruction.java
----------------------------------------------------------------------
diff --git 
a/src/main/java/org/apache/sysml/runtime/instructions/cp/FunctionCallCPInstruction.java
 
b/src/main/java/org/apache/sysml/runtime/instructions/cp/FunctionCallCPInstruction.java
index e785196..1c001f0 100644
--- 
a/src/main/java/org/apache/sysml/runtime/instructions/cp/FunctionCallCPInstruction.java
+++ 
b/src/main/java/org/apache/sysml/runtime/instructions/cp/FunctionCallCPInstruction.java
@@ -39,17 +39,15 @@ import org.apache.sysml.runtime.instructions.Instruction;
 import org.apache.sysml.runtime.instructions.InstructionUtils;
 
 public class FunctionCallCPInstruction extends CPInstruction {
-       private String _functionName;
-       private String _namespace;
+       private final String _functionName;
+       private final String _namespace;
        private final CPOperand[] _boundInputs;
        private final ArrayList<String> _boundInputNames;
        private final ArrayList<String> _boundOutputNames;
-       private HashSet<String> _expectRetVars = null;
 
        private FunctionCallCPInstruction(String namespace, String functName, 
CPOperand[] boundInputs, 
                ArrayList<String> boundInputNames, ArrayList<String> 
boundOutputNames, String istr) {
-               super(null, functName, istr);
-               _cptype = CPINSTRUCTION_TYPE.External;
+               super(CPType.External, null, functName, istr);
                _functionName = functName;
                _namespace = namespace;
                _boundInputs = boundInputs;
@@ -173,15 +171,13 @@ public class FunctionCallCPInstruction extends 
CPInstruction {
                }
                
                // cleanup all returned variables w/o binding 
-               if( _expectRetVars == null ) {
-                       _expectRetVars = new HashSet<>();
-                       for(DataIdentifier di : fpb.getOutputParams())
-                               _expectRetVars.add(di.getName());
-               }
+               HashSet<String> expectRetVars = new HashSet<>();
+               for(DataIdentifier di : fpb.getOutputParams())
+                       expectRetVars.add(di.getName());
                
                LocalVariableMap retVars = fn_ec.getVariables();
                for( Entry<String,Data> var : retVars.entrySet() ) {
-                       if( _expectRetVars.contains(var.getKey()) )
+                       if( expectRetVars.contains(var.getKey()) )
                                continue;
                        //cleanup unexpected return values to avoid leaks
                        if( var.getValue() instanceof MatrixObject )
@@ -237,17 +233,6 @@ public class FunctionCallCPInstruction extends 
CPInstruction {
                return _boundOutputNames;
        }
 
-       public void setFunctionName(String fname)
-       {
-               //update instruction string
-               String oldfname = _functionName;
-               instString = updateInstStringFunctionName(oldfname, fname);
-               
-               //set attribute
-               _functionName = fname;
-               instOpcode = fname;
-       }
-
        public String updateInstStringFunctionName(String pattern, String 
replace)
        {
                //split current instruction

http://git-wip-us.apache.org/repos/asf/systemml/blob/75b93f26/src/main/java/org/apache/sysml/runtime/instructions/cp/IndexingCPInstruction.java
----------------------------------------------------------------------
diff --git 
a/src/main/java/org/apache/sysml/runtime/instructions/cp/IndexingCPInstruction.java
 
b/src/main/java/org/apache/sysml/runtime/instructions/cp/IndexingCPInstruction.java
index e3cb100..20fd852 100644
--- 
a/src/main/java/org/apache/sysml/runtime/instructions/cp/IndexingCPInstruction.java
+++ 
b/src/main/java/org/apache/sysml/runtime/instructions/cp/IndexingCPInstruction.java
@@ -30,11 +30,11 @@ import 
org.apache.sysml.runtime.matrix.operators.SimpleOperator;
 import org.apache.sysml.runtime.util.IndexRange;
 
 public abstract class IndexingCPInstruction extends UnaryCPInstruction {
-       protected CPOperand rowLower, rowUpper, colLower, colUpper;
+       protected final CPOperand rowLower, rowUpper, colLower, colUpper;
 
        protected IndexingCPInstruction(Operator op, CPOperand in, CPOperand 
rl, CPOperand ru, CPOperand cl, CPOperand cu,
                        CPOperand out, String opcode, String istr) {
-               super(op, in, out, opcode, istr);
+               super(CPType.MatrixIndexing, op, in, out, opcode, istr);
                rowLower = rl;
                rowUpper = ru;
                colLower = cl;
@@ -43,7 +43,7 @@ public abstract class IndexingCPInstruction extends 
UnaryCPInstruction {
 
        protected IndexingCPInstruction(Operator op, CPOperand lhsInput, 
CPOperand rhsInput, CPOperand rl, CPOperand ru,
                        CPOperand cl, CPOperand cu, CPOperand out, String 
opcode, String istr) {
-               super(op, lhsInput, rhsInput, out, opcode, istr);
+               super(CPType.MatrixIndexing, op, lhsInput, rhsInput, out, 
opcode, istr);
                rowLower = rl;
                rowUpper = ru;
                colLower = cl;

http://git-wip-us.apache.org/repos/asf/systemml/blob/75b93f26/src/main/java/org/apache/sysml/runtime/instructions/cp/MMChainCPInstruction.java
----------------------------------------------------------------------
diff --git 
a/src/main/java/org/apache/sysml/runtime/instructions/cp/MMChainCPInstruction.java
 
b/src/main/java/org/apache/sysml/runtime/instructions/cp/MMChainCPInstruction.java
index de898fe..b69772b 100644
--- 
a/src/main/java/org/apache/sysml/runtime/instructions/cp/MMChainCPInstruction.java
+++ 
b/src/main/java/org/apache/sysml/runtime/instructions/cp/MMChainCPInstruction.java
@@ -28,13 +28,12 @@ import org.apache.sysml.runtime.matrix.operators.Operator;
 
 public class MMChainCPInstruction extends UnaryCPInstruction {
 
-       private ChainType _type = null;
-       private int _numThreads = -1;
+       private final ChainType _type;
+       private final int _numThreads;
 
        private MMChainCPInstruction(Operator op, CPOperand in1, CPOperand in2, 
CPOperand in3, CPOperand out,
                        ChainType type, int k, String opcode, String istr) {
-               super(op, in1, in2, in3, out, opcode, istr);
-               _cptype = CPINSTRUCTION_TYPE.MMChain;
+               super(CPType.MMChain, op, in1, in2, in3, out, opcode, istr);
                _type = type;
                _numThreads = k;
        }
@@ -43,7 +42,7 @@ public class MMChainCPInstruction extends UnaryCPInstruction {
                throws DMLRuntimeException 
        {
                //parse instruction parts (without exec type)
-               String[] parts = 
InstructionUtils.getInstructionPartsWithValueType( str );              
+               String[] parts = 
InstructionUtils.getInstructionPartsWithValueType( str );
                InstructionUtils.checkNumFields( parts, 5, 6 );
        
                String opcode = parts[0];

http://git-wip-us.apache.org/repos/asf/systemml/blob/75b93f26/src/main/java/org/apache/sysml/runtime/instructions/cp/MMTSJCPInstruction.java
----------------------------------------------------------------------
diff --git 
a/src/main/java/org/apache/sysml/runtime/instructions/cp/MMTSJCPInstruction.java
 
b/src/main/java/org/apache/sysml/runtime/instructions/cp/MMTSJCPInstruction.java
index eb414e7..edd420a 100644
--- 
a/src/main/java/org/apache/sysml/runtime/instructions/cp/MMTSJCPInstruction.java
+++ 
b/src/main/java/org/apache/sysml/runtime/instructions/cp/MMTSJCPInstruction.java
@@ -27,13 +27,12 @@ import org.apache.sysml.runtime.matrix.data.MatrixBlock;
 import org.apache.sysml.runtime.matrix.operators.Operator;
 
 public class MMTSJCPInstruction extends UnaryCPInstruction {
-       private MMTSJType _type = null;
-       private int _numThreads = 1;
+       private final MMTSJType _type;
+       private final int _numThreads;
 
        private MMTSJCPInstruction(Operator op, CPOperand in1, MMTSJType type, 
CPOperand out, int k, String opcode,
                        String istr) {
-               super(op, in1, out, opcode, istr);
-               _cptype = CPINSTRUCTION_TYPE.MMTSJ;
+               super(CPType.MMTSJ, op, in1, out, opcode, istr);
                _type = type;
                _numThreads = k;
        }

http://git-wip-us.apache.org/repos/asf/systemml/blob/75b93f26/src/main/java/org/apache/sysml/runtime/instructions/cp/MatrixBuiltinCPInstruction.java
----------------------------------------------------------------------
diff --git 
a/src/main/java/org/apache/sysml/runtime/instructions/cp/MatrixBuiltinCPInstruction.java
 
b/src/main/java/org/apache/sysml/runtime/instructions/cp/MatrixBuiltinCPInstruction.java
index 30000f9..84e3ebb 100644
--- 
a/src/main/java/org/apache/sysml/runtime/instructions/cp/MatrixBuiltinCPInstruction.java
+++ 
b/src/main/java/org/apache/sysml/runtime/instructions/cp/MatrixBuiltinCPInstruction.java
@@ -28,7 +28,7 @@ import 
org.apache.sysml.runtime.matrix.operators.UnaryOperator;
 
 public class MatrixBuiltinCPInstruction extends BuiltinUnaryCPInstruction {
        protected MatrixBuiltinCPInstruction(Operator op, CPOperand in, 
CPOperand out, String opcode, String instr) {
-               super(op, in, out, 1, opcode, instr);
+               super(op, in, out, opcode, instr);
        }
 
        @Override 
@@ -55,6 +55,6 @@ public class MatrixBuiltinCPInstruction extends 
BuiltinUnaryCPInstruction {
                        }
                        
                        ec.setMatrixOutput(output_name, retBlock, 
getExtendedOpcode());
-               }               
+               }
        }
 }

http://git-wip-us.apache.org/repos/asf/systemml/blob/75b93f26/src/main/java/org/apache/sysml/runtime/instructions/cp/MatrixBuiltinNaryCPInstruction.java
----------------------------------------------------------------------
diff --git 
a/src/main/java/org/apache/sysml/runtime/instructions/cp/MatrixBuiltinNaryCPInstruction.java
 
b/src/main/java/org/apache/sysml/runtime/instructions/cp/MatrixBuiltinNaryCPInstruction.java
index 8ad619b..c3c04b4 100644
--- 
a/src/main/java/org/apache/sysml/runtime/instructions/cp/MatrixBuiltinNaryCPInstruction.java
+++ 
b/src/main/java/org/apache/sysml/runtime/instructions/cp/MatrixBuiltinNaryCPInstruction.java
@@ -24,7 +24,7 @@ import 
org.apache.sysml.runtime.controlprogram.context.ExecutionContext;
 import org.apache.sysml.runtime.matrix.data.MatrixBlock;
 import org.apache.sysml.runtime.matrix.operators.Operator;
 
-public class MatrixBuiltinNaryCPInstruction extends BuiltinNary {
+public class MatrixBuiltinNaryCPInstruction extends BuiltinNaryCPInstruction {
 
        protected MatrixBuiltinNaryCPInstruction(Operator op, String opcode, 
String istr, CPOperand output, CPOperand[] inputs) {
                super(op, opcode, istr, output, inputs);

http://git-wip-us.apache.org/repos/asf/systemml/blob/75b93f26/src/main/java/org/apache/sysml/runtime/instructions/cp/MatrixMatrixBuiltinCPInstruction.java
----------------------------------------------------------------------
diff --git 
a/src/main/java/org/apache/sysml/runtime/instructions/cp/MatrixMatrixBuiltinCPInstruction.java
 
b/src/main/java/org/apache/sysml/runtime/instructions/cp/MatrixMatrixBuiltinCPInstruction.java
index 96a1e86..f247740 100644
--- 
a/src/main/java/org/apache/sysml/runtime/instructions/cp/MatrixMatrixBuiltinCPInstruction.java
+++ 
b/src/main/java/org/apache/sysml/runtime/instructions/cp/MatrixMatrixBuiltinCPInstruction.java
@@ -31,7 +31,7 @@ public class MatrixMatrixBuiltinCPInstruction extends 
BuiltinBinaryCPInstruction
 
        protected MatrixMatrixBuiltinCPInstruction(Operator op, CPOperand in1, 
CPOperand in2, CPOperand out, String opcode,
                        String istr) {
-               super(op, in1, in2, out, 2, opcode, istr);
+               super(op, in1, in2, out, opcode, istr);
        }
 
        @Override

http://git-wip-us.apache.org/repos/asf/systemml/blob/75b93f26/src/main/java/org/apache/sysml/runtime/instructions/cp/MatrixReshapeCPInstruction.java
----------------------------------------------------------------------
diff --git 
a/src/main/java/org/apache/sysml/runtime/instructions/cp/MatrixReshapeCPInstruction.java
 
b/src/main/java/org/apache/sysml/runtime/instructions/cp/MatrixReshapeCPInstruction.java
index 6474bd6..d13f97c 100644
--- 
a/src/main/java/org/apache/sysml/runtime/instructions/cp/MatrixReshapeCPInstruction.java
+++ 
b/src/main/java/org/apache/sysml/runtime/instructions/cp/MatrixReshapeCPInstruction.java
@@ -29,15 +29,13 @@ import org.apache.sysml.runtime.matrix.operators.Operator;
 
 public class MatrixReshapeCPInstruction extends UnaryCPInstruction {
 
-       private CPOperand _opRows = null;
-       private CPOperand _opCols = null;
-       private CPOperand _opByRow = null;
+       private final CPOperand _opRows;
+       private final CPOperand _opCols;
+       private final CPOperand _opByRow;
 
        private MatrixReshapeCPInstruction(Operator op, CPOperand in1, 
CPOperand in2, CPOperand in3, CPOperand in4,
                        CPOperand out, String opcode, String istr) {
-               super(op, in1, out, opcode, istr);
-               _cptype = CPINSTRUCTION_TYPE.MatrixReshape;
-
+               super(CPType.MatrixReshape, op, in1, out, opcode, istr);
                _opRows = in2;
                _opCols = in3;
                _opByRow = in4;

http://git-wip-us.apache.org/repos/asf/systemml/blob/75b93f26/src/main/java/org/apache/sysml/runtime/instructions/cp/MatrixScalarBuiltinCPInstruction.java
----------------------------------------------------------------------
diff --git 
a/src/main/java/org/apache/sysml/runtime/instructions/cp/MatrixScalarBuiltinCPInstruction.java
 
b/src/main/java/org/apache/sysml/runtime/instructions/cp/MatrixScalarBuiltinCPInstruction.java
index 35c5177..964957e 100644
--- 
a/src/main/java/org/apache/sysml/runtime/instructions/cp/MatrixScalarBuiltinCPInstruction.java
+++ 
b/src/main/java/org/apache/sysml/runtime/instructions/cp/MatrixScalarBuiltinCPInstruction.java
@@ -30,7 +30,7 @@ public class MatrixScalarBuiltinCPInstruction extends 
BuiltinBinaryCPInstruction
 
        protected MatrixScalarBuiltinCPInstruction(Operator op, CPOperand in1, 
CPOperand in2, CPOperand out, String opcode,
                        String instr) {
-               super(op, in1, in2, out, 2, opcode, instr);
+               super(op, in1, in2, out, opcode, instr);
        }
 
        @Override 
@@ -44,7 +44,7 @@ public class MatrixScalarBuiltinCPInstruction extends 
BuiltinBinaryCPInstruction
                ScalarObject constant = (ScalarObject) 
ec.getScalarInput(scalar.getName(), scalar.getValueType(), scalar.isLiteral());
                
                ScalarOperator sc_op = (ScalarOperator) _optr;
-               sc_op.setConstant(constant.getDoubleValue());
+               sc_op = sc_op.setConstant(constant.getDoubleValue());
                
                MatrixBlock retBlock = (MatrixBlock) 
inBlock.scalarOperations(sc_op, new MatrixBlock());
 

http://git-wip-us.apache.org/repos/asf/systemml/blob/75b93f26/src/main/java/org/apache/sysml/runtime/instructions/cp/MultiReturnBuiltinCPInstruction.java
----------------------------------------------------------------------
diff --git 
a/src/main/java/org/apache/sysml/runtime/instructions/cp/MultiReturnBuiltinCPInstruction.java
 
b/src/main/java/org/apache/sysml/runtime/instructions/cp/MultiReturnBuiltinCPInstruction.java
index d69f08c..343a821 100644
--- 
a/src/main/java/org/apache/sysml/runtime/instructions/cp/MultiReturnBuiltinCPInstruction.java
+++ 
b/src/main/java/org/apache/sysml/runtime/instructions/cp/MultiReturnBuiltinCPInstruction.java
@@ -33,22 +33,15 @@ import org.apache.sysml.runtime.matrix.operators.Operator;
 
 public class MultiReturnBuiltinCPInstruction extends ComputationCPInstruction {
 
-       int arity;
        protected ArrayList<CPOperand> _outputs;
 
        private MultiReturnBuiltinCPInstruction(Operator op, CPOperand input1, 
ArrayList<CPOperand> outputs, String opcode,
                        String istr) {
-               super(op, input1, null, outputs.get(0), opcode, istr);
-               _cptype = CPINSTRUCTION_TYPE.MultiReturnBuiltin;
+               super(CPType.MultiReturnBuiltin, op, input1, null, 
outputs.get(0), opcode, istr);
                _outputs = outputs;
        }
-
-       public int getArity() {
-               return arity;
-       }
        
-       public CPOperand getOutput(int i)
-       {
+       public CPOperand getOutput(int i) {
                return _outputs.get(i);
        }
        

http://git-wip-us.apache.org/repos/asf/systemml/blob/75b93f26/src/main/java/org/apache/sysml/runtime/instructions/cp/MultiReturnParameterizedBuiltinCPInstruction.java
----------------------------------------------------------------------
diff --git 
a/src/main/java/org/apache/sysml/runtime/instructions/cp/MultiReturnParameterizedBuiltinCPInstruction.java
 
b/src/main/java/org/apache/sysml/runtime/instructions/cp/MultiReturnParameterizedBuiltinCPInstruction.java
index 27013a7..c4f61bb 100644
--- 
a/src/main/java/org/apache/sysml/runtime/instructions/cp/MultiReturnParameterizedBuiltinCPInstruction.java
+++ 
b/src/main/java/org/apache/sysml/runtime/instructions/cp/MultiReturnParameterizedBuiltinCPInstruction.java
@@ -33,12 +33,11 @@ import org.apache.sysml.runtime.transform.encode.Encoder;
 import org.apache.sysml.runtime.transform.encode.EncoderFactory;
 
 public class MultiReturnParameterizedBuiltinCPInstruction extends 
ComputationCPInstruction {
-       protected ArrayList<CPOperand> _outputs;
+       protected final ArrayList<CPOperand> _outputs;
 
        private MultiReturnParameterizedBuiltinCPInstruction(Operator op, 
CPOperand input1, CPOperand input2,
                        ArrayList<CPOperand> outputs, String opcode, String 
istr) {
-               super(op, input1, input2, outputs.get(0), opcode, istr);
-               _cptype = CPINSTRUCTION_TYPE.MultiReturnBuiltin;
+               super(CPType.MultiReturnBuiltin, op, input1, input2, 
outputs.get(0), opcode, istr);
                _outputs = outputs;
        }
 

http://git-wip-us.apache.org/repos/asf/systemml/blob/75b93f26/src/main/java/org/apache/sysml/runtime/instructions/cp/PMMJCPInstruction.java
----------------------------------------------------------------------
diff --git 
a/src/main/java/org/apache/sysml/runtime/instructions/cp/PMMJCPInstruction.java 
b/src/main/java/org/apache/sysml/runtime/instructions/cp/PMMJCPInstruction.java
index ec42e05..bb0cb2a 100644
--- 
a/src/main/java/org/apache/sysml/runtime/instructions/cp/PMMJCPInstruction.java
+++ 
b/src/main/java/org/apache/sysml/runtime/instructions/cp/PMMJCPInstruction.java
@@ -27,11 +27,11 @@ import org.apache.sysml.runtime.matrix.operators.Operator;
 
 public class PMMJCPInstruction extends ComputationCPInstruction {
 
-       private int _numThreads = -1;
+       private final int _numThreads;
 
        private PMMJCPInstruction(Operator op, CPOperand in1, CPOperand in2, 
CPOperand in3, CPOperand out, int k,
                        String opcode, String istr) {
-               super(op, in1, in2, in3, out, opcode, istr);
+               super(CPType.AggregateBinary, op, in1, in2, in3, out, opcode, 
istr);
                _numThreads = k;
        }
 

http://git-wip-us.apache.org/repos/asf/systemml/blob/75b93f26/src/main/java/org/apache/sysml/runtime/instructions/cp/ParameterizedBuiltinCPInstruction.java
----------------------------------------------------------------------
diff --git 
a/src/main/java/org/apache/sysml/runtime/instructions/cp/ParameterizedBuiltinCPInstruction.java
 
b/src/main/java/org/apache/sysml/runtime/instructions/cp/ParameterizedBuiltinCPInstruction.java
index f6532d7..5a7442a 100644
--- 
a/src/main/java/org/apache/sysml/runtime/instructions/cp/ParameterizedBuiltinCPInstruction.java
+++ 
b/src/main/java/org/apache/sysml/runtime/instructions/cp/ParameterizedBuiltinCPInstruction.java
@@ -55,19 +55,13 @@ public class ParameterizedBuiltinCPInstruction extends 
ComputationCPInstruction
        private static final String TOSTRING_SEPARATOR = " ";
        private static final String TOSTRING_LINESEPARATOR = "\n";
 
-       private int arity;
-       protected HashMap<String, String> params;
+       protected final HashMap<String, String> params;
 
        protected ParameterizedBuiltinCPInstruction(Operator op, 
HashMap<String, String> paramsMap, CPOperand out,
                        String opcode, String istr) {
-               super(op, null, null, out, opcode, istr);
-               _cptype = CPINSTRUCTION_TYPE.ParameterizedBuiltin;
+               super(CPType.ParameterizedBuiltin, op, null, null, out, opcode, 
istr);
                params = paramsMap;
        }
-
-       public int getArity() {
-               return arity;
-       }
        
        public HashMap<String,String> getParameterMap() { 
                return params; 

http://git-wip-us.apache.org/repos/asf/systemml/blob/75b93f26/src/main/java/org/apache/sysml/runtime/instructions/cp/PlusMultCPInstruction.java
----------------------------------------------------------------------
diff --git 
a/src/main/java/org/apache/sysml/runtime/instructions/cp/PlusMultCPInstruction.java
 
b/src/main/java/org/apache/sysml/runtime/instructions/cp/PlusMultCPInstruction.java
index c49f229..27f8521 100644
--- 
a/src/main/java/org/apache/sysml/runtime/instructions/cp/PlusMultCPInstruction.java
+++ 
b/src/main/java/org/apache/sysml/runtime/instructions/cp/PlusMultCPInstruction.java
@@ -28,11 +28,11 @@ import 
org.apache.sysml.runtime.instructions.InstructionUtils;
 import org.apache.sysml.runtime.matrix.data.MatrixBlock;
 import org.apache.sysml.runtime.matrix.operators.BinaryOperator;
 
-public class PlusMultCPInstruction extends ArithmeticBinaryCPInstruction {
+public class PlusMultCPInstruction extends ComputationCPInstruction {
+       
        private PlusMultCPInstruction(BinaryOperator op, CPOperand in1, 
CPOperand in2, CPOperand in3, CPOperand out,
                        String opcode, String str) {
-               super(op, in1, in2, out, opcode, str);
-               input3 = in3;
+               super(CPType.ArithmeticBinary, op, in1, in2, in3, out, opcode, 
str);
        }
 
        public static PlusMultCPInstruction parseInstruction(String str)

http://git-wip-us.apache.org/repos/asf/systemml/blob/75b93f26/src/main/java/org/apache/sysml/runtime/instructions/cp/QuantilePickCPInstruction.java
----------------------------------------------------------------------
diff --git 
a/src/main/java/org/apache/sysml/runtime/instructions/cp/QuantilePickCPInstruction.java
 
b/src/main/java/org/apache/sysml/runtime/instructions/cp/QuantilePickCPInstruction.java
index 1ad6054..2950a1c 100644
--- 
a/src/main/java/org/apache/sysml/runtime/instructions/cp/QuantilePickCPInstruction.java
+++ 
b/src/main/java/org/apache/sysml/runtime/instructions/cp/QuantilePickCPInstruction.java
@@ -36,8 +36,8 @@ import org.apache.sysml.runtime.util.UtilFunctions;
 
 public class QuantilePickCPInstruction extends BinaryCPInstruction {
 
-       private OperationTypes _type = null;
-       private boolean _inmem = true;
+       private final OperationTypes _type;
+       private final boolean _inmem;
 
        private QuantilePickCPInstruction(Operator op, CPOperand in, CPOperand 
out, OperationTypes type, boolean inmem,
                        String opcode, String istr) {
@@ -46,8 +46,7 @@ public class QuantilePickCPInstruction extends 
BinaryCPInstruction {
 
        private QuantilePickCPInstruction(Operator op, CPOperand in, CPOperand 
in2, CPOperand out, OperationTypes type,
                        boolean inmem, String opcode, String istr) {
-               super(op, in, in2, out, opcode, istr);
-               _cptype = CPINSTRUCTION_TYPE.QPick;
+               super(CPType.QPick, op, in, in2, out, opcode, istr);
                _type = type;
                _inmem = inmem;
        }

http://git-wip-us.apache.org/repos/asf/systemml/blob/75b93f26/src/main/java/org/apache/sysml/runtime/instructions/cp/QuantileSortCPInstruction.java
----------------------------------------------------------------------
diff --git 
a/src/main/java/org/apache/sysml/runtime/instructions/cp/QuantileSortCPInstruction.java
 
b/src/main/java/org/apache/sysml/runtime/instructions/cp/QuantileSortCPInstruction.java
index f25c225..b7a5254 100644
--- 
a/src/main/java/org/apache/sysml/runtime/instructions/cp/QuantileSortCPInstruction.java
+++ 
b/src/main/java/org/apache/sysml/runtime/instructions/cp/QuantileSortCPInstruction.java
@@ -45,8 +45,7 @@ public class QuantileSortCPInstruction extends 
UnaryCPInstruction {
 
        private QuantileSortCPInstruction(Operator op, CPOperand in1, CPOperand 
in2, CPOperand out, String opcode,
                        String istr) {
-               super(op, in1, in2, out, opcode, istr);
-               _cptype = CPINSTRUCTION_TYPE.QSort;
+               super(CPType.QSort, op, in1, in2, out, opcode, istr);
        }
 
        public static QuantileSortCPInstruction parseInstruction ( String str ) 

http://git-wip-us.apache.org/repos/asf/systemml/blob/75b93f26/src/main/java/org/apache/sysml/runtime/instructions/cp/QuaternaryCPInstruction.java
----------------------------------------------------------------------
diff --git 
a/src/main/java/org/apache/sysml/runtime/instructions/cp/QuaternaryCPInstruction.java
 
b/src/main/java/org/apache/sysml/runtime/instructions/cp/QuaternaryCPInstruction.java
index d4e89ce..b0bb392 100644
--- 
a/src/main/java/org/apache/sysml/runtime/instructions/cp/QuaternaryCPInstruction.java
+++ 
b/src/main/java/org/apache/sysml/runtime/instructions/cp/QuaternaryCPInstruction.java
@@ -35,13 +35,12 @@ import 
org.apache.sysml.runtime.matrix.operators.QuaternaryOperator;
 
 public class QuaternaryCPInstruction extends ComputationCPInstruction {
 
-       private CPOperand input4 = null;
-       private int _numThreads = -1;
+       private final CPOperand input4;
+       private final int _numThreads;
 
        private QuaternaryCPInstruction(Operator op, CPOperand in1, CPOperand 
in2, CPOperand in3, CPOperand in4,
                        CPOperand out, int k, String opcode, String istr) {
-               super(op, in1, in2, in3, out, opcode, istr);
-
+               super(CPType.Quaternary, op, in1, in2, in3, out, opcode, istr);
                input4 = in4;
                _numThreads = k;
        }

http://git-wip-us.apache.org/repos/asf/systemml/blob/75b93f26/src/main/java/org/apache/sysml/runtime/instructions/cp/RelationalBinaryCPInstruction.java
----------------------------------------------------------------------
diff --git 
a/src/main/java/org/apache/sysml/runtime/instructions/cp/RelationalBinaryCPInstruction.java
 
b/src/main/java/org/apache/sysml/runtime/instructions/cp/RelationalBinaryCPInstruction.java
index 29d2304..b04aa9f 100644
--- 
a/src/main/java/org/apache/sysml/runtime/instructions/cp/RelationalBinaryCPInstruction.java
+++ 
b/src/main/java/org/apache/sysml/runtime/instructions/cp/RelationalBinaryCPInstruction.java
@@ -29,8 +29,7 @@ public abstract class RelationalBinaryCPInstruction extends 
BinaryCPInstruction
 
        protected RelationalBinaryCPInstruction(Operator op, CPOperand in1, 
CPOperand in2, CPOperand out, String opcode,
                        String istr) {
-               super(op, in1, in2, out, opcode, istr);
-               _cptype = CPINSTRUCTION_TYPE.RelationalBinary;
+               super(CPType.RelationalBinary, op, in1, in2, out, opcode, istr);
        }
 
        public static RelationalBinaryCPInstruction parseInstruction ( String 
str ) throws DMLRuntimeException {

http://git-wip-us.apache.org/repos/asf/systemml/blob/75b93f26/src/main/java/org/apache/sysml/runtime/instructions/cp/ReorgCPInstruction.java
----------------------------------------------------------------------
diff --git 
a/src/main/java/org/apache/sysml/runtime/instructions/cp/ReorgCPInstruction.java
 
b/src/main/java/org/apache/sysml/runtime/instructions/cp/ReorgCPInstruction.java
index c52f020..3788d68 100644
--- 
a/src/main/java/org/apache/sysml/runtime/instructions/cp/ReorgCPInstruction.java
+++ 
b/src/main/java/org/apache/sysml/runtime/instructions/cp/ReorgCPInstruction.java
@@ -34,9 +34,9 @@ import 
org.apache.sysml.runtime.matrix.operators.ReorgOperator;
 
 public class ReorgCPInstruction extends UnaryCPInstruction {
        // sort-specific attributes (to enable variable attributes)
-       private CPOperand _col = null;
-       private CPOperand _desc = null;
-       private CPOperand _ixret = null;
+       private final CPOperand _col;
+       private final CPOperand _desc;
+       private final CPOperand _ixret;
 
        /**
         * for opcodes r' and rdiag
@@ -53,8 +53,7 @@ public class ReorgCPInstruction extends UnaryCPInstruction {
         *            ?
         */
        private ReorgCPInstruction(Operator op, CPOperand in, CPOperand out, 
String opcode, String istr) {
-               super(op, in, out, opcode, istr);
-               _cptype = CPINSTRUCTION_TYPE.Reorg;
+               this(op, in, out, null, null, null, opcode, istr);
        }
 
        /**
@@ -77,9 +76,9 @@ public class ReorgCPInstruction extends UnaryCPInstruction {
         * @param istr
         *            ?
         */
-       private ReorgCPInstruction(Operator op, CPOperand in, CPOperand col, 
CPOperand desc, CPOperand ixret, CPOperand out,
+       private ReorgCPInstruction(Operator op, CPOperand in, CPOperand out, 
CPOperand col, CPOperand desc, CPOperand ixret,
                        String opcode, String istr) {
-               this(op, in, out, opcode, istr);
+               super(CPType.Reorg, op, in, out, opcode, istr);
                _col = col;
                _desc = desc;
                _ixret = ixret;
@@ -117,7 +116,7 @@ public class ReorgCPInstruction extends UnaryCPInstruction {
                        CPOperand desc = new CPOperand(parts[3]);
                        CPOperand ixret = new CPOperand(parts[4]);
                        return new ReorgCPInstruction(new 
ReorgOperator(SortIndex.getSortIndexFnObject(1,false,false)), 
-                                                             in, col, desc, 
ixret, out, opcode, str);
+                                               in, out, col, desc, ixret, 
opcode, str);
                }
                else {
                        throw new DMLRuntimeException("Unknown opcode while 
parsing a ReorgInstruction: " + str);
@@ -129,19 +128,19 @@ public class ReorgCPInstruction extends 
UnaryCPInstruction {
                        throws DMLRuntimeException 
        {
                //acquire inputs
-               MatrixBlock matBlock = ec.getMatrixInput(input1.getName(), 
getExtendedOpcode());                
+               MatrixBlock matBlock = ec.getMatrixInput(input1.getName(), 
getExtendedOpcode());
                ReorgOperator r_op = (ReorgOperator) _optr;
                if( r_op.fn instanceof SortIndex ) {
                        //additional attributes for sort
                        int col = (int)ec.getScalarInput(_col.getName(), 
_col.getValueType(), _col.isLiteral()).getLongValue();
                        boolean desc = ec.getScalarInput(_desc.getName(), 
_desc.getValueType(), _desc.isLiteral()).getBooleanValue();
                        boolean ixret = ec.getScalarInput(_ixret.getName(), 
_ixret.getValueType(), _ixret.isLiteral()).getBooleanValue();
-                       r_op.fn = SortIndex.getSortIndexFnObject(col, desc, 
ixret);
+                       r_op = r_op.setFn(SortIndex.getSortIndexFnObject(col, 
desc, ixret));
                }
                
                //execute operation
                MatrixBlock soresBlock = (MatrixBlock) 
(matBlock.reorgOperations(r_op, new MatrixBlock(), 0, 0, 0));
-        
+               
                //release inputs/outputs
                ec.releaseMatrixInput(input1.getName(), getExtendedOpcode());
                ec.setMatrixOutput(output.getName(), soresBlock, 
getExtendedOpcode());

http://git-wip-us.apache.org/repos/asf/systemml/blob/75b93f26/src/main/java/org/apache/sysml/runtime/instructions/cp/ScalarBuiltinCPInstruction.java
----------------------------------------------------------------------
diff --git 
a/src/main/java/org/apache/sysml/runtime/instructions/cp/ScalarBuiltinCPInstruction.java
 
b/src/main/java/org/apache/sysml/runtime/instructions/cp/ScalarBuiltinCPInstruction.java
index 9ced515..77fb73e 100644
--- 
a/src/main/java/org/apache/sysml/runtime/instructions/cp/ScalarBuiltinCPInstruction.java
+++ 
b/src/main/java/org/apache/sysml/runtime/instructions/cp/ScalarBuiltinCPInstruction.java
@@ -30,7 +30,7 @@ import 
org.apache.sysml.runtime.matrix.operators.SimpleOperator;
 public class ScalarBuiltinCPInstruction extends BuiltinUnaryCPInstruction {
 
        protected ScalarBuiltinCPInstruction(Operator op, CPOperand in, 
CPOperand out, String opcode, String instr) {
-               super(op, in, out, 1, opcode, instr);
+               super(op, in, out, opcode, instr);
        }
 
        @Override 

http://git-wip-us.apache.org/repos/asf/systemml/blob/75b93f26/src/main/java/org/apache/sysml/runtime/instructions/cp/ScalarBuiltinNaryCPInstruction.java
----------------------------------------------------------------------
diff --git 
a/src/main/java/org/apache/sysml/runtime/instructions/cp/ScalarBuiltinNaryCPInstruction.java
 
b/src/main/java/org/apache/sysml/runtime/instructions/cp/ScalarBuiltinNaryCPInstruction.java
index 9b15696..04408a8 100644
--- 
a/src/main/java/org/apache/sysml/runtime/instructions/cp/ScalarBuiltinNaryCPInstruction.java
+++ 
b/src/main/java/org/apache/sysml/runtime/instructions/cp/ScalarBuiltinNaryCPInstruction.java
@@ -36,7 +36,7 @@ import org.apache.sysml.runtime.matrix.operators.Operator;
  * string.
  *
  */
-public class ScalarBuiltinNaryCPInstruction extends BuiltinNary {
+public class ScalarBuiltinNaryCPInstruction extends BuiltinNaryCPInstruction {
 
        protected ScalarBuiltinNaryCPInstruction(Operator op, String opcode, 
String istr, CPOperand output, CPOperand[] inputs) {
                super(op, opcode, istr, output, inputs);

http://git-wip-us.apache.org/repos/asf/systemml/blob/75b93f26/src/main/java/org/apache/sysml/runtime/instructions/cp/ScalarMatrixArithmeticCPInstruction.java
----------------------------------------------------------------------
diff --git 
a/src/main/java/org/apache/sysml/runtime/instructions/cp/ScalarMatrixArithmeticCPInstruction.java
 
b/src/main/java/org/apache/sysml/runtime/instructions/cp/ScalarMatrixArithmeticCPInstruction.java
index 3ad836b..e1f177f 100644
--- 
a/src/main/java/org/apache/sysml/runtime/instructions/cp/ScalarMatrixArithmeticCPInstruction.java
+++ 
b/src/main/java/org/apache/sysml/runtime/instructions/cp/ScalarMatrixArithmeticCPInstruction.java
@@ -45,7 +45,7 @@ public class ScalarMatrixArithmeticCPInstruction extends 
ArithmeticBinaryCPInstr
                ScalarObject constant = (ScalarObject) 
ec.getScalarInput(scalar.getName(), scalar.getValueType(), scalar.isLiteral());
 
                ScalarOperator sc_op = (ScalarOperator) _optr;
-               sc_op.setConstant(constant.getDoubleValue());
+               sc_op = sc_op.setConstant(constant.getDoubleValue());
                
                MatrixBlock retBlock = (MatrixBlock) 
inBlock.scalarOperations(sc_op, new MatrixBlock());
                

http://git-wip-us.apache.org/repos/asf/systemml/blob/75b93f26/src/main/java/org/apache/sysml/runtime/instructions/cp/ScalarMatrixRelationalCPInstruction.java
----------------------------------------------------------------------
diff --git 
a/src/main/java/org/apache/sysml/runtime/instructions/cp/ScalarMatrixRelationalCPInstruction.java
 
b/src/main/java/org/apache/sysml/runtime/instructions/cp/ScalarMatrixRelationalCPInstruction.java
index 00e6616..12f545d 100644
--- 
a/src/main/java/org/apache/sysml/runtime/instructions/cp/ScalarMatrixRelationalCPInstruction.java
+++ 
b/src/main/java/org/apache/sysml/runtime/instructions/cp/ScalarMatrixRelationalCPInstruction.java
@@ -45,7 +45,7 @@ public class ScalarMatrixRelationalCPInstruction extends 
RelationalBinaryCPInstr
                ScalarObject constant = (ScalarObject) 
ec.getScalarInput(scalar.getName(), scalar.getValueType(), scalar.isLiteral());
                
                ScalarOperator sc_op = (ScalarOperator) _optr;
-               sc_op.setConstant(constant.getDoubleValue());
+               sc_op = sc_op.setConstant(constant.getDoubleValue());
                
                MatrixBlock retBlock = (MatrixBlock) 
inBlock.scalarOperations(sc_op, new MatrixBlock());
                

http://git-wip-us.apache.org/repos/asf/systemml/blob/75b93f26/src/main/java/org/apache/sysml/runtime/instructions/cp/ScalarScalarBuiltinCPInstruction.java
----------------------------------------------------------------------
diff --git 
a/src/main/java/org/apache/sysml/runtime/instructions/cp/ScalarScalarBuiltinCPInstruction.java
 
b/src/main/java/org/apache/sysml/runtime/instructions/cp/ScalarScalarBuiltinCPInstruction.java
index 8722358..217bb96 100644
--- 
a/src/main/java/org/apache/sysml/runtime/instructions/cp/ScalarScalarBuiltinCPInstruction.java
+++ 
b/src/main/java/org/apache/sysml/runtime/instructions/cp/ScalarScalarBuiltinCPInstruction.java
@@ -29,7 +29,7 @@ public class ScalarScalarBuiltinCPInstruction extends 
BuiltinBinaryCPInstruction
 
        protected ScalarScalarBuiltinCPInstruction(Operator op, CPOperand in1, 
CPOperand in2, CPOperand out, String opcode,
                        String instr) {
-               super(op, in1, in2, out, 2, opcode, instr);
+               super(op, in1, in2, out, opcode, instr);
        }
 
        @Override 

http://git-wip-us.apache.org/repos/asf/systemml/blob/75b93f26/src/main/java/org/apache/sysml/runtime/instructions/cp/SpoofCPInstruction.java
----------------------------------------------------------------------
diff --git 
a/src/main/java/org/apache/sysml/runtime/instructions/cp/SpoofCPInstruction.java
 
b/src/main/java/org/apache/sysml/runtime/instructions/cp/SpoofCPInstruction.java
index 021ab34..16ab1a4 100644
--- 
a/src/main/java/org/apache/sysml/runtime/instructions/cp/SpoofCPInstruction.java
+++ 
b/src/main/java/org/apache/sysml/runtime/instructions/cp/SpoofCPInstruction.java
@@ -37,7 +37,7 @@ public class SpoofCPInstruction extends 
ComputationCPInstruction {
 
        private SpoofCPInstruction(SpoofOperator op, Class<?> cla, int k, 
CPOperand[] in, CPOperand out, String opcode,
                        String str) {
-               super(null, null, null, out, opcode, str);
+               super(CPType.SpoofFused, null, null, null, out, opcode, str);
                _class = cla;
                _op = op;
                _numThreads = k;

http://git-wip-us.apache.org/repos/asf/systemml/blob/75b93f26/src/main/java/org/apache/sysml/runtime/instructions/cp/StringInitCPInstruction.java
----------------------------------------------------------------------
diff --git 
a/src/main/java/org/apache/sysml/runtime/instructions/cp/StringInitCPInstruction.java
 
b/src/main/java/org/apache/sysml/runtime/instructions/cp/StringInitCPInstruction.java
index f8897ba..4b89573 100644
--- 
a/src/main/java/org/apache/sysml/runtime/instructions/cp/StringInitCPInstruction.java
+++ 
b/src/main/java/org/apache/sysml/runtime/instructions/cp/StringInitCPInstruction.java
@@ -32,13 +32,13 @@ import org.apache.sysml.runtime.matrix.operators.Operator;
 public class StringInitCPInstruction extends UnaryCPInstruction {
        private static final String DELIM = " ";
 
-       private long _rlen = -1;
-       private long _clen = -1;
-       private String _data = null;
+       private final long _rlen;
+       private final long _clen;
+       private final String _data;
 
        private StringInitCPInstruction(Operator op, CPOperand in, CPOperand 
out, long rows, long cols, int rpb, int cpb,
                        String data, String opcode, String inst) {
-               super(op, in, out, opcode, inst);
+               super(CPType.StringInit, op, in, out, opcode, inst);
                _rlen = rows;
                _clen = cols;
                _data = data;

http://git-wip-us.apache.org/repos/asf/systemml/blob/75b93f26/src/main/java/org/apache/sysml/runtime/instructions/cp/TernaryCPInstruction.java
----------------------------------------------------------------------
diff --git 
a/src/main/java/org/apache/sysml/runtime/instructions/cp/TernaryCPInstruction.java
 
b/src/main/java/org/apache/sysml/runtime/instructions/cp/TernaryCPInstruction.java
index 2e970c1..6d42976 100644
--- 
a/src/main/java/org/apache/sysml/runtime/instructions/cp/TernaryCPInstruction.java
+++ 
b/src/main/java/org/apache/sysml/runtime/instructions/cp/TernaryCPInstruction.java
@@ -33,17 +33,17 @@ import 
org.apache.sysml.runtime.matrix.operators.SimpleOperator;
 import org.apache.sysml.runtime.util.DataConverter;
 
 public class TernaryCPInstruction extends ComputationCPInstruction {
-       private String _outDim1;
-       private String _outDim2;
-       private boolean _dim1Literal;
-       private boolean _dim2Literal;
-       private boolean _isExpand;
-       private boolean _ignoreZeros;
+       private final String _outDim1;
+       private final String _outDim2;
+       private final boolean _dim1Literal;
+       private final boolean _dim2Literal;
+       private final boolean _isExpand;
+       private final boolean _ignoreZeros;
 
        private TernaryCPInstruction(Operator op, CPOperand in1, CPOperand in2, 
CPOperand in3, CPOperand out,
                        String outputDim1, boolean dim1Literal, String 
outputDim2, boolean dim2Literal, boolean isExpand,
                        boolean ignoreZeros, String opcode, String istr) {
-               super(op, in1, in2, in3, out, opcode, istr);
+               super(CPType.Ternary, op, in1, in2, in3, out, opcode, istr);
                _outDim1 = outputDim1;
                _dim1Literal = dim1Literal;
                _outDim2 = outputDim2;

http://git-wip-us.apache.org/repos/asf/systemml/blob/75b93f26/src/main/java/org/apache/sysml/runtime/instructions/cp/UaggOuterChainCPInstruction.java
----------------------------------------------------------------------
diff --git 
a/src/main/java/org/apache/sysml/runtime/instructions/cp/UaggOuterChainCPInstruction.java
 
b/src/main/java/org/apache/sysml/runtime/instructions/cp/UaggOuterChainCPInstruction.java
index 007fadc..e48f396 100644
--- 
a/src/main/java/org/apache/sysml/runtime/instructions/cp/UaggOuterChainCPInstruction.java
+++ 
b/src/main/java/org/apache/sysml/runtime/instructions/cp/UaggOuterChainCPInstruction.java
@@ -33,19 +33,14 @@ import 
org.apache.sysml.runtime.matrix.operators.AggregateUnaryOperator;
 import org.apache.sysml.runtime.matrix.operators.BinaryOperator;
 
 public class UaggOuterChainCPInstruction extends UnaryCPInstruction {
-       // operators
-       private AggregateUnaryOperator _uaggOp = null;
-       private BinaryOperator _bOp = null;
+       private final AggregateUnaryOperator _uaggOp;
+       private final BinaryOperator _bOp;
 
        private UaggOuterChainCPInstruction(BinaryOperator bop, 
AggregateUnaryOperator uaggop, AggregateOperator aggop,
                        CPOperand in1, CPOperand in2, CPOperand out, String 
opcode, String istr) {
-               super(bop, in1, in2, out, opcode, istr);
-               _cptype = CPINSTRUCTION_TYPE.UaggOuterChain;
-
+               super(CPType.UaggOuterChain, bop, in1, in2, out, opcode, istr);
                _uaggOp = uaggop;
                _bOp = bop;
-
-               instString = istr;
        }
 
        public static UaggOuterChainCPInstruction parseInstruction(String str)

http://git-wip-us.apache.org/repos/asf/systemml/blob/75b93f26/src/main/java/org/apache/sysml/runtime/instructions/cp/UnaryCPInstruction.java
----------------------------------------------------------------------
diff --git 
a/src/main/java/org/apache/sysml/runtime/instructions/cp/UnaryCPInstruction.java
 
b/src/main/java/org/apache/sysml/runtime/instructions/cp/UnaryCPInstruction.java
index 384357a..f3f903a 100644
--- 
a/src/main/java/org/apache/sysml/runtime/instructions/cp/UnaryCPInstruction.java
+++ 
b/src/main/java/org/apache/sysml/runtime/instructions/cp/UnaryCPInstruction.java
@@ -27,18 +27,18 @@ import 
org.apache.sysml.runtime.matrix.operators.SimpleOperator;
 
 public abstract class UnaryCPInstruction extends ComputationCPInstruction {
 
-       protected UnaryCPInstruction(Operator op, CPOperand in, CPOperand out, 
String opcode, String instr) {
-               this(op, in, null, null, out, opcode, instr);
+       protected UnaryCPInstruction(CPType type, Operator op, CPOperand in, 
CPOperand out, String opcode, String instr) {
+               this(type, op, in, null, null, out, opcode, instr);
        }
 
-       protected UnaryCPInstruction(Operator op, CPOperand in1, CPOperand in2, 
CPOperand out, String opcode,
+       protected UnaryCPInstruction(CPType type, Operator op, CPOperand in1, 
CPOperand in2, CPOperand out, String opcode,
                        String instr) {
-               this(op, in1, in2, null, out, opcode, instr);
+               this(type, op, in1, in2, null, out, opcode, instr);
        }
 
-       protected UnaryCPInstruction(Operator op, CPOperand in1, CPOperand in2, 
CPOperand in3, CPOperand out, String opcode,
+       protected UnaryCPInstruction(CPType type, Operator op, CPOperand in1, 
CPOperand in2, CPOperand in3, CPOperand out, String opcode,
                        String instr) {
-               super(op, in1, in2, in3, out, opcode, instr);
+               super(type, op, in1, in2, in3, out, opcode, instr);
        }
 
        static String parseUnaryInstruction(String instr, CPOperand in,

http://git-wip-us.apache.org/repos/asf/systemml/blob/75b93f26/src/main/java/org/apache/sysml/runtime/instructions/cp/VariableCPInstruction.java
----------------------------------------------------------------------
diff --git 
a/src/main/java/org/apache/sysml/runtime/instructions/cp/VariableCPInstruction.java
 
b/src/main/java/org/apache/sysml/runtime/instructions/cp/VariableCPInstruction.java
index 2239919..9ddcdcc 100644
--- 
a/src/main/java/org/apache/sysml/runtime/instructions/cp/VariableCPInstruction.java
+++ 
b/src/main/java/org/apache/sysml/runtime/instructions/cp/VariableCPInstruction.java
@@ -86,7 +86,7 @@ public class VariableCPInstruction extends CPInstruction {
                CopyVariable,
                MoveVariable,
                RemoveVariable,
-               RemoveVariableAndFile,           
+               RemoveVariableAndFile,
                CastAsScalarVariable, 
                CastAsMatrixVariable, 
                CastAsFrameVariable,
@@ -98,58 +98,52 @@ public class VariableCPInstruction extends CPInstruction {
                SetFileName, 
        }
        
-       private static IDSequence _uniqueVarID; 
+       private static final IDSequence _uniqueVarID = new IDSequence(true);
        private static final int CREATEVAR_FILE_NAME_VAR_POS=3;
        
        private final VariableOperationCode opcode;
        private final List<CPOperand> inputs;
        private final CPOperand output;
-       private MetaData metadata;
-       private UpdateType _updateType;
+       private final MetaData metadata;
+       private final UpdateType _updateType;
        
        // Frame related members
-       private String _schema;
+       private final String _schema;
        
        // CSV related members (used only in createvar instructions)
-       private FileFormatProperties _formatProperties;
-       
-       static {
-               _uniqueVarID  = new IDSequence(true); 
-       }
+       private final FileFormatProperties _formatProperties;
 
        private VariableCPInstruction(VariableOperationCode op, CPOperand in1, 
CPOperand in2, CPOperand in3, CPOperand out,
-                       int _arity, String sopcode, String istr) {
-               super(sopcode, istr);
-               _cptype = CPINSTRUCTION_TYPE.Variable;
+                       MetaData meta, FileFormatProperties fprops, String 
schema, UpdateType utype, String sopcode, String istr) {
+               super(CPType.Variable, sopcode, istr);
                opcode = op;
                inputs = new ArrayList<>();
                addInput(in1);
                addInput(in2);
                addInput(in3);
                output = out;
-
-               _formatProperties = null;
-               _schema = null;
+               metadata = meta;
+               _formatProperties = fprops;
+               _schema = schema;
+               _updateType = utype;
+       }
+       
+       private VariableCPInstruction(VariableOperationCode op, CPOperand in1, 
CPOperand in2, CPOperand in3, CPOperand out,
+                       String sopcode, String istr) {
+               this(op, in1, in2, in3, out, null, null, null, null, sopcode, 
istr);
        }
 
        // This version of the constructor is used only in case of 
CreateVariable
        private VariableCPInstruction(VariableOperationCode op, CPOperand in1, 
CPOperand in2, CPOperand in3, MetaData md,
-                       UpdateType updateType, int _arity, String schema, 
String sopcode, String istr) {
-               this(op, in1, in2, in3, (CPOperand) null, _arity, sopcode, 
istr);
-               metadata = md;
-               _updateType = updateType;
-               _schema = schema;
+                       UpdateType updateType, String schema, String sopcode, 
String istr) {
+               this(op, in1, in2, in3, null, md, null, schema, updateType, 
sopcode, istr);
        }
 
        // This version of the constructor is used only in case of 
CreateVariable
        private VariableCPInstruction(VariableOperationCode op, CPOperand in1, 
CPOperand in2, CPOperand in3, MetaData md,
-                       UpdateType updateType, int _arity, FileFormatProperties 
formatProperties, String schema, String sopcode,
+                       UpdateType updateType, FileFormatProperties 
formatProperties, String schema, String sopcode,
                        String istr) {
-               this(op, in1, in2, in3, (CPOperand) null, _arity, sopcode, 
istr);
-               metadata = md;
-               _updateType = updateType;
-               _formatProperties = formatProperties;
-               _schema = schema;
+               this(op, in1, in2, in3, null, md, formatProperties, schema, 
updateType, sopcode, istr);
        }
 
        private static VariableOperationCode getVariableOperationCode ( String 
str ) throws DMLRuntimeException {
@@ -235,10 +229,6 @@ public class VariableCPInstruction extends CPInstruction {
                return _formatProperties;
        }
        
-       public void setFormatProperties(FileFormatProperties prop) {
-               _formatProperties = prop;
-       }
-       
        public List<CPOperand> getInputs() {
                return inputs;
        }
@@ -293,7 +283,6 @@ public class VariableCPInstruction extends CPInstruction {
                String[] parts = 
InstructionUtils.getInstructionPartsWithValueType ( str );
                String opcode = parts[0];
                VariableOperationCode voc = getVariableOperationCode(opcode);
-               int _arity = -1;
                
                if ( voc == VariableOperationCode.CreateVariable ){
                        if ( parts.length < 5 )  //&& parts.length != 10 )
@@ -311,9 +300,8 @@ public class VariableCPInstruction extends CPInstruction {
                                throw new DMLRuntimeException("Invalid number 
of operands in write instruction: " + str);
                }
                else {
-                       _arity = getArity(voc);
                        if( voc != VariableOperationCode.RemoveVariable )
-                               InstructionUtils.checkNumFields ( parts, _arity 
); // no output
+                               InstructionUtils.checkNumFields ( parts, 
getArity(voc) ); // no output
                }
                
                CPOperand in1=null, in2=null, in3=null, in4=null, out=null;
@@ -389,10 +377,10 @@ public class VariableCPInstruction extends CPInstruction {
                                                naStrings = parts[16];
                                        fmtProperties = new 
CSVFileFormatProperties(hasHeader, delim, fill, fillValue, naStrings) ;
                                }
-                               return new 
VariableCPInstruction(VariableOperationCode.CreateVariable, in1, in2, in3, 
iimd, updateType, parts.length, fmtProperties, schema, opcode, str);
+                               return new 
VariableCPInstruction(VariableOperationCode.CreateVariable, in1, in2, in3, 
iimd, updateType, fmtProperties, schema, opcode, str);
                        }
                        else {
-                               return new 
VariableCPInstruction(VariableOperationCode.CreateVariable, in1, in2, in3, 
iimd, updateType, parts.length, schema, opcode, str);
+                               return new 
VariableCPInstruction(VariableOperationCode.CreateVariable, in1, in2, in3, 
iimd, updateType, schema, opcode, str);
                        }
                case AssignVariable:
                        in1 = new CPOperand(parts[1]);
@@ -414,7 +402,7 @@ public class VariableCPInstruction extends CPInstruction {
                        
                case RemoveVariable:
                        VariableCPInstruction rminst = new 
VariableCPInstruction(
-                               getVariableOperationCode(opcode), null, null, 
null, out, _arity, opcode, str);
+                               getVariableOperationCode(opcode), null, null, 
null, out, opcode, str);
                        for( int i=1; i<parts.length; i++ )
                                rminst.addInput(new CPOperand(parts[i], 
ValueType.UNKNOWN, DataType.SCALAR));
                        return rminst;
@@ -442,22 +430,21 @@ public class VariableCPInstruction extends CPInstruction {
                        in2 = new CPOperand(parts[2]);
                        in3 = new CPOperand(parts[3]);
                        
-                       VariableCPInstruction inst = new 
VariableCPInstruction(getVariableOperationCode(opcode), in1, in2, in3, out, 
_arity, opcode, str); 
-                       
+                       FileFormatProperties fprops = null;
                        if ( in3.getName().equalsIgnoreCase("csv") ) {
                                boolean hasHeader = 
Boolean.parseBoolean(parts[4]);
                                String delim = parts[5];
                                boolean sparse = Boolean.parseBoolean(parts[6]);
-                               FileFormatProperties formatProperties = new 
CSVFileFormatProperties(hasHeader, delim, sparse);
-                               inst.setFormatProperties(formatProperties);
+                               fprops = new CSVFileFormatProperties(hasHeader, 
delim, sparse);
                                in4 = new CPOperand(parts[7]); // description
-                               inst.addInput(in4);
                        } else {
-                               FileFormatProperties ffp = new 
FileFormatProperties();
-                               inst.setFormatProperties(ffp);
+                               fprops = new FileFormatProperties();
                                in4 = new CPOperand(parts[4]); // description
-                               inst.addInput(in4);
                        }
+                       VariableCPInstruction inst = new VariableCPInstruction(
+                               getVariableOperationCode(opcode), in1, in2, 
in3, out, null, fprops, null, null, opcode, str); 
+                       inst.addInput(in4);
+                       
                        return inst;
                        
                case Read:
@@ -474,7 +461,7 @@ public class VariableCPInstruction extends CPInstruction {
                        break;
                
                }
-               return new 
VariableCPInstruction(getVariableOperationCode(opcode), in1, in2, in3, out, 
_arity, opcode, str);
+               return new 
VariableCPInstruction(getVariableOperationCode(opcode), in1, in2, in3, out, 
opcode, str);
        }
        
        @Override

http://git-wip-us.apache.org/repos/asf/systemml/blob/75b93f26/src/main/java/org/apache/sysml/runtime/instructions/gpu/GPUInstruction.java
----------------------------------------------------------------------
diff --git 
a/src/main/java/org/apache/sysml/runtime/instructions/gpu/GPUInstruction.java 
b/src/main/java/org/apache/sysml/runtime/instructions/gpu/GPUInstruction.java
index 9dd163d..f5d2f46 100644
--- 
a/src/main/java/org/apache/sysml/runtime/instructions/gpu/GPUInstruction.java
+++ 
b/src/main/java/org/apache/sysml/runtime/instructions/gpu/GPUInstruction.java
@@ -147,7 +147,7 @@ public abstract class GPUInstruction extends Instruction {
        protected boolean _requiresLabelUpdate = false;
 
        private GPUInstruction(String opcode, String istr) {
-               type = INSTRUCTION_TYPE.GPU;
+               type = IType.GPU;
                instString = istr;
 
                // prepare opcode and update requirement for repeated usage

http://git-wip-us.apache.org/repos/asf/systemml/blob/75b93f26/src/main/java/org/apache/sysml/runtime/instructions/gpu/ScalarMatrixArithmeticGPUInstruction.java
----------------------------------------------------------------------
diff --git 
a/src/main/java/org/apache/sysml/runtime/instructions/gpu/ScalarMatrixArithmeticGPUInstruction.java
 
b/src/main/java/org/apache/sysml/runtime/instructions/gpu/ScalarMatrixArithmeticGPUInstruction.java
index 7aba2ce..4552c1f 100644
--- 
a/src/main/java/org/apache/sysml/runtime/instructions/gpu/ScalarMatrixArithmeticGPUInstruction.java
+++ 
b/src/main/java/org/apache/sysml/runtime/instructions/gpu/ScalarMatrixArithmeticGPUInstruction.java
@@ -55,7 +55,7 @@ public class ScalarMatrixArithmeticGPUInstruction extends 
ArithmeticBinaryGPUIns
                ec.setMetaData(_output.getName(), rlen, clen);
                
                ScalarOperator sc_op = (ScalarOperator) _optr;
-               sc_op.setConstant(constant.getDoubleValue());
+               sc_op = sc_op.setConstant(constant.getDoubleValue());
                
                LibMatrixCUDA.matrixScalarArithmetic(ec, ec.getGPUContext(0), 
getExtendedOpcode(), in1, _output.getName(), isTransposed, sc_op);
                

http://git-wip-us.apache.org/repos/asf/systemml/blob/75b93f26/src/main/java/org/apache/sysml/runtime/instructions/gpu/ScalarMatrixRelationalBinaryGPUInstruction.java
----------------------------------------------------------------------
diff --git 
a/src/main/java/org/apache/sysml/runtime/instructions/gpu/ScalarMatrixRelationalBinaryGPUInstruction.java
 
b/src/main/java/org/apache/sysml/runtime/instructions/gpu/ScalarMatrixRelationalBinaryGPUInstruction.java
index 7d9e180..59e717f 100644
--- 
a/src/main/java/org/apache/sysml/runtime/instructions/gpu/ScalarMatrixRelationalBinaryGPUInstruction.java
+++ 
b/src/main/java/org/apache/sysml/runtime/instructions/gpu/ScalarMatrixRelationalBinaryGPUInstruction.java
@@ -51,7 +51,7 @@ public class ScalarMatrixRelationalBinaryGPUInstruction 
extends RelationalBinary
                ec.setMetaData(_output.getName(), rlen, clen);
 
                ScalarOperator sc_op = (ScalarOperator) _optr;
-               sc_op.setConstant(constant.getDoubleValue());
+               sc_op = sc_op.setConstant(constant.getDoubleValue());
 
                LibMatrixCUDA.matrixScalarRelational(ec, ec.getGPUContext(0), 
getExtendedOpcode(), in1, _output.getName(), sc_op);
 

http://git-wip-us.apache.org/repos/asf/systemml/blob/75b93f26/src/main/java/org/apache/sysml/runtime/instructions/mr/MRInstruction.java
----------------------------------------------------------------------
diff --git 
a/src/main/java/org/apache/sysml/runtime/instructions/mr/MRInstruction.java 
b/src/main/java/org/apache/sysml/runtime/instructions/mr/MRInstruction.java
index e0a97bf..b8b566c 100644
--- a/src/main/java/org/apache/sysml/runtime/instructions/mr/MRInstruction.java
+++ b/src/main/java/org/apache/sysml/runtime/instructions/mr/MRInstruction.java
@@ -42,7 +42,7 @@ public abstract class MRInstruction extends Instruction {
        public byte output;
 
        protected MRInstruction(Operator op, byte out) {
-               type = INSTRUCTION_TYPE.MAPREDUCE;
+               type = IType.MAPREDUCE;
                optr = op;
                output = out;
                mrtype = MRINSTRUCTION_TYPE.INVALID;

http://git-wip-us.apache.org/repos/asf/systemml/blob/75b93f26/src/main/java/org/apache/sysml/runtime/instructions/mr/ScalarInstruction.java
----------------------------------------------------------------------
diff --git 
a/src/main/java/org/apache/sysml/runtime/instructions/mr/ScalarInstruction.java 
b/src/main/java/org/apache/sysml/runtime/instructions/mr/ScalarInstruction.java
index 58f6821..04f4a89 100644
--- 
a/src/main/java/org/apache/sysml/runtime/instructions/mr/ScalarInstruction.java
+++ 
b/src/main/java/org/apache/sysml/runtime/instructions/mr/ScalarInstruction.java
@@ -37,9 +37,6 @@ public class ScalarInstruction extends UnaryMRInstructionBase 
{
                super(op, in, out);
                mrtype = MRINSTRUCTION_TYPE.ArithmeticBinary;
                instString = istr;
-
-               // value dependent safe-safeness (trigger re-evaluation 
sparse-safe)
-               op.setConstant(op.getConstant());
        }
 
        public static ScalarInstruction parseInstruction ( String str )

http://git-wip-us.apache.org/repos/asf/systemml/blob/75b93f26/src/main/java/org/apache/sysml/runtime/instructions/spark/BinarySPInstruction.java
----------------------------------------------------------------------
diff --git 
a/src/main/java/org/apache/sysml/runtime/instructions/spark/BinarySPInstruction.java
 
b/src/main/java/org/apache/sysml/runtime/instructions/spark/BinarySPInstruction.java
index 2bd622a..948371d 100644
--- 
a/src/main/java/org/apache/sysml/runtime/instructions/spark/BinarySPInstruction.java
+++ 
b/src/main/java/org/apache/sysml/runtime/instructions/spark/BinarySPInstruction.java
@@ -176,7 +176,7 @@ public abstract class BinarySPInstruction extends 
ComputationSPInstruction {
                CPOperand scalar = ( input1.getDataType() == DataType.MATRIX ) 
? input2 : input1;
                ScalarObject constant = (ScalarObject) 
ec.getScalarInput(scalar.getName(), scalar.getValueType(), scalar.isLiteral());
                ScalarOperator sc_op = (ScalarOperator) _optr;
-               sc_op.setConstant(constant.getDoubleValue());
+               sc_op = sc_op.setConstant(constant.getDoubleValue());
                
                //execute scalar matrix arithmetic instruction
                JavaPairRDD<MatrixIndexes,MatrixBlock> out = in1.mapValues( new 
MatrixScalarUnaryFunction(sc_op) );

http://git-wip-us.apache.org/repos/asf/systemml/blob/75b93f26/src/main/java/org/apache/sysml/runtime/instructions/spark/SPInstruction.java
----------------------------------------------------------------------
diff --git 
a/src/main/java/org/apache/sysml/runtime/instructions/spark/SPInstruction.java 
b/src/main/java/org/apache/sysml/runtime/instructions/spark/SPInstruction.java
index bafe4e8..ae7da3d 100644
--- 
a/src/main/java/org/apache/sysml/runtime/instructions/spark/SPInstruction.java
+++ 
b/src/main/java/org/apache/sysml/runtime/instructions/spark/SPInstruction.java
@@ -45,7 +45,7 @@ public abstract class SPInstruction extends Instruction {
        protected boolean _requiresLabelUpdate = false;
 
        protected SPInstruction(String opcode, String istr) {
-               type = INSTRUCTION_TYPE.SPARK;
+               type = IType.SPARK;
                instString = istr;
                instOpcode = opcode;
 

http://git-wip-us.apache.org/repos/asf/systemml/blob/75b93f26/src/main/java/org/apache/sysml/runtime/matrix/operators/AggregateBinaryOperator.java
----------------------------------------------------------------------
diff --git 
a/src/main/java/org/apache/sysml/runtime/matrix/operators/AggregateBinaryOperator.java
 
b/src/main/java/org/apache/sysml/runtime/matrix/operators/AggregateBinaryOperator.java
index 712325d..661c12a 100644
--- 
a/src/main/java/org/apache/sysml/runtime/matrix/operators/AggregateBinaryOperator.java
+++ 
b/src/main/java/org/apache/sysml/runtime/matrix/operators/AggregateBinaryOperator.java
@@ -29,31 +29,24 @@ import 
org.apache.sysml.runtime.functionobjects.ValueFunction;
 
 public class AggregateBinaryOperator extends Operator implements Serializable
 {
-
        private static final long serialVersionUID = 1666421325090925726L;
 
-       public ValueFunction binaryFn;
-       public AggregateOperator aggOp;
-       private int k; //num threads
+       public final ValueFunction binaryFn;
+       public final AggregateOperator aggOp;
+       private final int k; //num threads
        
-       public AggregateBinaryOperator(ValueFunction inner, AggregateOperator 
outer)
-       {
+       public AggregateBinaryOperator(ValueFunction inner, AggregateOperator 
outer) {
                //default degree of parallelism is 1 
                //(for example in MR/Spark because we parallelize over the 
number of blocks)
                this( inner, outer, 1 );
        }
        
-       public AggregateBinaryOperator(ValueFunction inner, AggregateOperator 
outer, int numThreads)
-       {
+       public AggregateBinaryOperator(ValueFunction inner, AggregateOperator 
outer, int numThreads) {
+               //so far, we only support matrix multiplication, and it is 
sparseSafe
+               super(inner instanceof Multiply && outer.increOp.fn instanceof 
Plus);
                binaryFn = inner;
                aggOp = outer;
                k = numThreads;
-               
-               //so far, we only support matrix multiplication, and it is 
sparseSafe
-               if(binaryFn instanceof Multiply && aggOp.increOp.fn instanceof 
Plus)
-                       sparseSafe=true;
-               else
-                       sparseSafe=false;
        }
        
        public int getNumThreads() {

http://git-wip-us.apache.org/repos/asf/systemml/blob/75b93f26/src/main/java/org/apache/sysml/runtime/matrix/operators/AggregateOperator.java
----------------------------------------------------------------------
diff --git 
a/src/main/java/org/apache/sysml/runtime/matrix/operators/AggregateOperator.java
 
b/src/main/java/org/apache/sysml/runtime/matrix/operators/AggregateOperator.java
index 56293e2..4e1322c 100644
--- 
a/src/main/java/org/apache/sysml/runtime/matrix/operators/AggregateOperator.java
+++ 
b/src/main/java/org/apache/sysml/runtime/matrix/operators/AggregateOperator.java
@@ -33,33 +33,24 @@ import 
org.apache.sysml.runtime.functionobjects.ValueFunction;
 
 public class AggregateOperator  extends Operator implements Serializable
 {
-
        private static final long serialVersionUID = 8761527329665129670L;
 
-       public double initialValue;
-       public BinaryOperator increOp;
+       public final double initialValue;
+       public final BinaryOperator increOp;
+       public final boolean correctionExists;
+       public final CorrectionLocationType correctionLocation;
        
-       public boolean correctionExists=false;
-       public CorrectionLocationType 
correctionLocation=CorrectionLocationType.INVALID;
+       public AggregateOperator(double initValue, ValueFunction op) {
+               this(initValue, op, false, CorrectionLocationType.INVALID);
+       }
        
-       public AggregateOperator(double initValue, ValueFunction op)
-       {
+       public AggregateOperator(double initValue, ValueFunction op, boolean 
correctionExists, CorrectionLocationType correctionLocation) {
+               //as long as (v op 0)=v, then op is sparseSafe
+               super(op instanceof Plus || op instanceof KahanPlus || op 
instanceof KahanPlusSq 
+                       || op instanceof Or || op instanceof Minus);
                initialValue=initValue;
                increOp=new BinaryOperator(op);
-               //increFn=op;
-               //as long as (v op 0)=v, then op is sparseSafe
-               if(op instanceof Plus || op instanceof KahanPlus || op 
instanceof KahanPlusSq
-                               || op instanceof Or || op instanceof Minus)
-                       sparseSafe=true;
-               else
-                       sparseSafe=false;
-       }
-       
-       public AggregateOperator(double initValue, ValueFunction op, boolean 
correctionExists, CorrectionLocationType correctionLocation)
-       {
-               this(initValue, op);
                this.correctionExists=correctionExists;
                this.correctionLocation=correctionLocation;
        }
-       
 }

http://git-wip-us.apache.org/repos/asf/systemml/blob/75b93f26/src/main/java/org/apache/sysml/runtime/matrix/operators/AggregateTernaryOperator.java
----------------------------------------------------------------------
diff --git 
a/src/main/java/org/apache/sysml/runtime/matrix/operators/AggregateTernaryOperator.java
 
b/src/main/java/org/apache/sysml/runtime/matrix/operators/AggregateTernaryOperator.java
index 7ffdaff..f9335de 100644
--- 
a/src/main/java/org/apache/sysml/runtime/matrix/operators/AggregateTernaryOperator.java
+++ 
b/src/main/java/org/apache/sysml/runtime/matrix/operators/AggregateTernaryOperator.java
@@ -30,25 +30,23 @@ public class AggregateTernaryOperator extends Operator 
implements Serializable
 {
        private static final long serialVersionUID = 4251745081160216784L;
        
-       public ValueFunction binaryFn;
-       public AggregateOperator aggOp;
-       public IndexFunction indexFn;
-       private int k; //num threads
+       public final ValueFunction binaryFn;
+       public final AggregateOperator aggOp;
+       public final IndexFunction indexFn;
+       private final int k; //num threads
        
        public AggregateTernaryOperator(ValueFunction inner, AggregateOperator 
outer, IndexFunction ixfun) {
                //default degree of parallelism is 1 (e.g., for distributed 
operations)
                this( inner, outer, ixfun, 1 );
        }
        
-       public AggregateTernaryOperator(ValueFunction inner, AggregateOperator 
outer, IndexFunction ixfun, int numThreads)
-       {
+       public AggregateTernaryOperator(ValueFunction inner, AggregateOperator 
outer, IndexFunction ixfun, int numThreads) {
+               //so far we only support sum-product and its sparse-safe
+               super(true);
                binaryFn = inner;
                aggOp = outer;
                indexFn = ixfun;
                k = numThreads;
-               
-               //so far we only support sum-product and its sparse-safe
-               sparseSafe = true;
        }
        
        public int getNumThreads() {

http://git-wip-us.apache.org/repos/asf/systemml/blob/75b93f26/src/main/java/org/apache/sysml/runtime/matrix/operators/AggregateUnaryOperator.java
----------------------------------------------------------------------
diff --git 
a/src/main/java/org/apache/sysml/runtime/matrix/operators/AggregateUnaryOperator.java
 
b/src/main/java/org/apache/sysml/runtime/matrix/operators/AggregateUnaryOperator.java
index 9fbc4f8..05926b9 100644
--- 
a/src/main/java/org/apache/sysml/runtime/matrix/operators/AggregateUnaryOperator.java
+++ 
b/src/main/java/org/apache/sysml/runtime/matrix/operators/AggregateUnaryOperator.java
@@ -32,9 +32,9 @@ public class AggregateUnaryOperator  extends Operator
 {
        private static final long serialVersionUID = 6690553323120787735L;
 
-       public AggregateOperator aggOp;
-       public IndexFunction indexFn;
-       private int k; //num threads
+       public final AggregateOperator aggOp;
+       public final IndexFunction indexFn;
+       private final int k; //num threads
 
        public AggregateUnaryOperator(AggregateOperator aop, IndexFunction iop)
        {
@@ -45,25 +45,14 @@ public class AggregateUnaryOperator  extends Operator
 
        public AggregateUnaryOperator(AggregateOperator aop, IndexFunction iop, 
int numThreads)
        {
+               super(aop.increOp.fn instanceof Plus 
+                       || aop.increOp.fn instanceof KahanPlus 
+                       || aop.increOp.fn instanceof KahanPlusSq 
+                       || aop.increOp.fn instanceof Or 
+                       || aop.increOp.fn instanceof Minus);
                aggOp = aop;
                indexFn = iop;
                k = numThreads;
-               
-               //decide on sparse safe
-               if( aggOp.increOp.fn instanceof Plus || 
-                       aggOp.increOp.fn instanceof KahanPlus ||
-                       aggOp.increOp.fn instanceof KahanPlusSq ||
-                       aggOp.increOp.fn instanceof Or ||
-                       aggOp.increOp.fn instanceof Minus ) 
-               {
-                       sparseSafe=true;
-               }
-               else
-                       sparseSafe=false;
-       }
-       
-       public void setNumThreads(int numThreads) {
-               k = numThreads;
        }
        
        public int getNumThreads(){

http://git-wip-us.apache.org/repos/asf/systemml/blob/75b93f26/src/main/java/org/apache/sysml/runtime/matrix/operators/BinaryOperator.java
----------------------------------------------------------------------
diff --git 
a/src/main/java/org/apache/sysml/runtime/matrix/operators/BinaryOperator.java 
b/src/main/java/org/apache/sysml/runtime/matrix/operators/BinaryOperator.java
index 620a599..2ff4497 100644
--- 
a/src/main/java/org/apache/sysml/runtime/matrix/operators/BinaryOperator.java
+++ 
b/src/main/java/org/apache/sysml/runtime/matrix/operators/BinaryOperator.java
@@ -49,16 +49,14 @@ public class BinaryOperator  extends Operator implements 
Serializable
 {
        private static final long serialVersionUID = -2547950181558989209L;
 
-       public ValueFunction fn;
+       public final ValueFunction fn;
        
-       public BinaryOperator(ValueFunction p)
-       {
-               fn = p;
-               
+       public BinaryOperator(ValueFunction p) {
                //binaryop is sparse-safe iff (0 op 0) == 0
-               sparseSafe = (fn instanceof Plus || fn instanceof Multiply 
-                       || fn instanceof Minus || fn instanceof And || fn 
instanceof Or 
-                       || fn instanceof PlusMultiply || fn instanceof 
MinusMultiply);
+               super (p instanceof Plus || p instanceof Multiply 
+                       || p instanceof Minus || p instanceof And || p 
instanceof Or 
+                       || p instanceof PlusMultiply || p instanceof 
MinusMultiply);
+               fn = p;
        }
        
        /**

http://git-wip-us.apache.org/repos/asf/systemml/blob/75b93f26/src/main/java/org/apache/sysml/runtime/matrix/operators/CMOperator.java
----------------------------------------------------------------------
diff --git 
a/src/main/java/org/apache/sysml/runtime/matrix/operators/CMOperator.java 
b/src/main/java/org/apache/sysml/runtime/matrix/operators/CMOperator.java
index 7a6c17b..57fa4b4 100644
--- a/src/main/java/org/apache/sysml/runtime/matrix/operators/CMOperator.java
+++ b/src/main/java/org/apache/sysml/runtime/matrix/operators/CMOperator.java
@@ -44,18 +44,19 @@ public class CMOperator extends Operator
        public AggregateOperationTypes aggOpType;
 
        public CMOperator(ValueFunction op, AggregateOperationTypes agg) {
+               super(true);
                fn = op;
                aggOpType = agg;
-               sparseSafe = true;
        }
 
        public AggregateOperationTypes getAggOpType() {
                return aggOpType;
        }
        
-       public void setCMAggOp(int order) {
-               aggOpType = getCMAggOpType(order);
-               fn = CM.getCMFnObject(aggOpType);
+       public CMOperator setCMAggOp(int order) {
+               AggregateOperationTypes agg = getCMAggOpType(order);
+               ValueFunction fn = CM.getCMFnObject(aggOpType);
+               return new CMOperator(fn, agg);
        }
        
        public static AggregateOperationTypes getCMAggOpType ( int order ) {

http://git-wip-us.apache.org/repos/asf/systemml/blob/75b93f26/src/main/java/org/apache/sysml/runtime/matrix/operators/COVOperator.java
----------------------------------------------------------------------
diff --git 
a/src/main/java/org/apache/sysml/runtime/matrix/operators/COVOperator.java 
b/src/main/java/org/apache/sysml/runtime/matrix/operators/COVOperator.java
index 40a1b05..d99d34c 100644
--- a/src/main/java/org/apache/sysml/runtime/matrix/operators/COVOperator.java
+++ b/src/main/java/org/apache/sysml/runtime/matrix/operators/COVOperator.java
@@ -24,14 +24,12 @@ import org.apache.sysml.runtime.functionobjects.COV;
 
 public class COVOperator extends Operator 
 {
-
        private static final long serialVersionUID = -8404264552880694469L;
 
-       public COV fn;
+       public final COV fn;
        
-       public COVOperator(COV op)
-       {
-               fn=op;
-               sparseSafe=true; // TODO: check with YY
+       public COVOperator(COV op) {
+               super(true);
+               fn = op;
        }
 }
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/systemml/blob/75b93f26/src/main/java/org/apache/sysml/runtime/matrix/operators/LeftScalarOperator.java
----------------------------------------------------------------------
diff --git 
a/src/main/java/org/apache/sysml/runtime/matrix/operators/LeftScalarOperator.java
 
b/src/main/java/org/apache/sysml/runtime/matrix/operators/LeftScalarOperator.java
index b8349fc..b47fe12 100644
--- 
a/src/main/java/org/apache/sysml/runtime/matrix/operators/LeftScalarOperator.java
+++ 
b/src/main/java/org/apache/sysml/runtime/matrix/operators/LeftScalarOperator.java
@@ -37,21 +37,15 @@ public class LeftScalarOperator extends ScalarOperator
        private static final long serialVersionUID = 2360577666575746424L;
        
        public LeftScalarOperator(ValueFunction p, double cst) {
-               super(p, cst);
+               super(p, cst, (p instanceof GreaterThan && cst<=0)
+                       || (p instanceof GreaterThanEquals && cst<0)
+                       || (p instanceof LessThan && cst>=0)
+                       || (p instanceof LessThanEquals && cst>0));
        }
        
        @Override
-       public void setConstant(double cst) 
-       {
-               //overwrites constant and sparse safe flag
-               super.setConstant(cst);
-               
-               //enable conditionally sparse safe operations
-               sparseSafe |= ( isSparseSafeStatic()
-                       || (fn instanceof GreaterThan && _constant<=0)
-                       || (fn instanceof GreaterThanEquals && _constant<0)
-                       || (fn instanceof LessThan && _constant>=0)
-                       || (fn instanceof LessThanEquals && _constant>0));
+       public ScalarOperator setConstant(double cst) {
+               return new LeftScalarOperator(fn, cst);
        }
 
        @Override

http://git-wip-us.apache.org/repos/asf/systemml/blob/75b93f26/src/main/java/org/apache/sysml/runtime/matrix/operators/Operator.java
----------------------------------------------------------------------
diff --git 
a/src/main/java/org/apache/sysml/runtime/matrix/operators/Operator.java 
b/src/main/java/org/apache/sysml/runtime/matrix/operators/Operator.java
index 296a1a2..43912c5 100644
--- a/src/main/java/org/apache/sysml/runtime/matrix/operators/Operator.java
+++ b/src/main/java/org/apache/sysml/runtime/matrix/operators/Operator.java
@@ -24,18 +24,15 @@ import java.io.Serializable;
 
 public class Operator implements Serializable 
 {
-
        private static final long serialVersionUID = -7453178973186473277L;
 
-       public boolean sparseSafe=false;
+       public final boolean sparseSafe;
 
-       public Operator()
-       {
-               
+       public Operator() {
+               this(false);
        }
        
-       public Operator(boolean sparseSafeFlag)
-       {
+       public Operator(boolean sparseSafeFlag) {
                sparseSafe = sparseSafeFlag;
        }
 }

Reply via email to