http://git-wip-us.apache.org/repos/asf/systemml/blob/e6424695/src/main/java/org/apache/sysml/runtime/matrix/data/LibMatrixBincell.java
----------------------------------------------------------------------
diff --git 
a/src/main/java/org/apache/sysml/runtime/matrix/data/LibMatrixBincell.java 
b/src/main/java/org/apache/sysml/runtime/matrix/data/LibMatrixBincell.java
index 27bb340..e515947 100644
--- a/src/main/java/org/apache/sysml/runtime/matrix/data/LibMatrixBincell.java
+++ b/src/main/java/org/apache/sysml/runtime/matrix/data/LibMatrixBincell.java
@@ -265,9 +265,9 @@ public class LibMatrixBincell
                        return; // skip entire empty block
                
                ret.allocateDenseBlock();
-               double[] a = m1.denseBlock;
-               double[] b = m2.denseBlock;
-               double[] c = ret.denseBlock;
+               double[] a = (m1.denseBlock != null) ? m1.getDenseBlockValues() 
: null;
+               double[] b = (m2.denseBlock != null) ? m2.getDenseBlockValues() 
: null;
+               double[] c = ret.getDenseBlockValues();
                int nnz = 0;
                
                if( atype == BinaryAccessType.MATRIX_COL_VECTOR )
@@ -631,7 +631,7 @@ public class LibMatrixBincell
                ret.allocateDenseBlock();
                final int m = ret.rlen;
                final int n = ret.clen;
-               double[] c = ret.denseBlock;
+               double[] c = ret.getDenseBlockValues();
                
                //1) process left input: assignment
                
@@ -657,9 +657,9 @@ public class LibMatrixBincell
                else //DENSE left
                {
                        if( !m1.isEmptyBlock(false) ) 
-                               System.arraycopy(m1.denseBlock, 0, c, 0, m*n);
+                               System.arraycopy(m1.getDenseBlockValues(), 0, 
c, 0, m*n);
                        else
-                               Arrays.fill(ret.denseBlock, 0, m*n, 0); 
+                               ret.denseBlock.set(0);
                }
                
                //2) process right input: op.fn (+,-,*), * only if dense
@@ -687,14 +687,14 @@ public class LibMatrixBincell
                else //DENSE right
                {
                        if( !m2.isEmptyBlock(false) ) {
-                               double[] a = m2.denseBlock;
+                               double[] a = m2.getDenseBlockValues();
                                for( int i=0; i<m*n; i++ ) {
                                        c[i] = op.fn.execute(c[i], a[i]);
                                        lnnz += (c[i]!=0) ? 1 : 0;
                                }
                        }
                        else if(op.fn instanceof Multiply)
-                               Arrays.fill(ret.denseBlock, 0, m*n, 0); 
+                               ret.denseBlock.set(0);
                }
                
                //3) recompute nnz
@@ -707,9 +707,9 @@ public class LibMatrixBincell
                ret.allocateDenseBlock();
                final int m = ret.rlen;
                final int n = ret.clen;
-               double[] a = m1.denseBlock;
-               double[] b = m2.denseBlock;
-               double[] c = ret.denseBlock;
+               double[] a = m1.getDenseBlockValues();
+               double[] b = m2.getDenseBlockValues();
+               double[] c = ret.getDenseBlockValues();
                ValueFunction fn = op.fn;
                
                //compute dense-dense binary, maintain nnz on-the-fly
@@ -782,7 +782,7 @@ public class LibMatrixBincell
                double b[] = DataConverter.convertToDoubleVector(mbRight);
                if(!mbOut.isAllocated())
                        mbOut.allocateDenseBlock();
-               double c[] = mbOut.getDenseBlock();
+               double c[] = mbOut.getDenseBlockValues();
                
                //pre-materialize various types used in inner loop
                boolean scanType1 = (bOp.fn instanceof LessThan || bOp.fn 
instanceof Equals 
@@ -875,9 +875,9 @@ public class LibMatrixBincell
                                && !m2.sparse && !m2.isEmptyBlock(false)  )
                        {
                                ret.allocateDenseBlock();
-                               double[] a = m1.denseBlock;
-                               double[] b = m2.denseBlock;
-                               double[] c = ret.denseBlock;
+                               double[] a = m1.getDenseBlockValues();
+                               double[] b = m2.getDenseBlockValues();
+                               double[] c = ret.getDenseBlockValues();
                                int lnnz = 0;
                                for( int i=0; i<rlen; i++ ) {
                                        c[i] = op.fn.execute( a[i], b[i] );
@@ -991,7 +991,7 @@ public class LibMatrixBincell
                        ret.allocateDenseBlock();
                        
                        SparseBlock a = m1.sparseBlock;
-                       double[] c = ret.denseBlock;                    
+                       double[] c = ret.getDenseBlockValues();
                        int m = m1.rlen;
                        int n = m1.clen;
                        
@@ -1027,8 +1027,8 @@ public class LibMatrixBincell
                //allocate dense block (if necessary), incl clear nnz
                ret.allocateDenseBlock(true);
                
-               double[] a = m1.denseBlock;
-               double[] c = ret.denseBlock;
+               double[] a = m1.getDenseBlockValues();
+               double[] c = ret.getDenseBlockValues();
                
                //compute scalar operation, incl nnz maintenance
                int limit = m1.rlen*m1.clen;

http://git-wip-us.apache.org/repos/asf/systemml/blob/e6424695/src/main/java/org/apache/sysml/runtime/matrix/data/LibMatrixDNN.java
----------------------------------------------------------------------
diff --git 
a/src/main/java/org/apache/sysml/runtime/matrix/data/LibMatrixDNN.java 
b/src/main/java/org/apache/sysml/runtime/matrix/data/LibMatrixDNN.java
index 0e4a468..ca38db3 100644
--- a/src/main/java/org/apache/sysml/runtime/matrix/data/LibMatrixDNN.java
+++ b/src/main/java/org/apache/sysml/runtime/matrix/data/LibMatrixDNN.java
@@ -403,7 +403,7 @@ public class LibMatrixDNN {
                        throw new DMLRuntimeException("Incorrect inputs for 
bias_add: input[" + N + " X " + input.getNumColumns()  + "] and bias[" + K + " 
X " + bias.getNumColumns() + "]");
                }
                
-               double [] outputArray = outputBlock.getDenseBlock();
+               double [] outputArray = outputBlock.getDenseBlockValues();
                if(input.isEmptyBlock()) {
                        for(int n = 0;  n < N; n++) 
                                ConvolutionUtils.fillBias(bias, outputArray, n, 
n+1, N, K, PQ);
@@ -414,7 +414,7 @@ public class LibMatrixDNN {
                        int index = 0;
                        if(bias.isInSparseFormat())
                                bias.sparseToDense(); // Since bias is 
extremely small array
-                       double [] biasArr = bias.getDenseBlock();
+                       double [] biasArr = bias.getDenseBlockValues();
                        for(int n = 0; n < N; n++) {
                                for(int k = 0; k < K; k++) {
                                        double biasVal = biasArr[k];
@@ -462,9 +462,9 @@ public class LibMatrixDNN {
                        outputBlock.copy(input);
                        if(bias.isInSparseFormat())
                                bias.sparseToDense(); // Since bias is 
extremely small array
-                       double [] biasArr = bias.getDenseBlock();
+                       double [] biasArr = bias.getDenseBlockValues();
                        if(!input.isInSparseFormat()) {
-                               double [] outputArray = 
outputBlock.getDenseBlock();
+                               double [] outputArray = 
outputBlock.getDenseBlockValues();
                                int index = 0;
                                for(int n = 0; n < N; n++) {
                                        for(int k = 0; k < K; k++) {

http://git-wip-us.apache.org/repos/asf/systemml/blob/e6424695/src/main/java/org/apache/sysml/runtime/matrix/data/LibMatrixDNNConv2dBackwardDataHelper.java
----------------------------------------------------------------------
diff --git 
a/src/main/java/org/apache/sysml/runtime/matrix/data/LibMatrixDNNConv2dBackwardDataHelper.java
 
b/src/main/java/org/apache/sysml/runtime/matrix/data/LibMatrixDNNConv2dBackwardDataHelper.java
index 55f263f..03dfa93 100644
--- 
a/src/main/java/org/apache/sysml/runtime/matrix/data/LibMatrixDNNConv2dBackwardDataHelper.java
+++ 
b/src/main/java/org/apache/sysml/runtime/matrix/data/LibMatrixDNNConv2dBackwardDataHelper.java
@@ -46,7 +46,7 @@ public class LibMatrixDNNConv2dBackwardDataHelper {
                public Long call() throws Exception {
                        int CHW = _params.C*_params.H*_params.W;
                        double [] ret = new double[CHW];
-                       double [] filterArr = _params.input1.getDenseBlock();
+                       double [] filterArr = 
_params.input1.getDenseBlockValues();
                        double [] dout_n = new 
double[_params.P*_params.Q*_params.K];
                        for(int n = _rl; n < _ru; n++) {
                                
LibMatrixDNNHelper.getRowInDenseFormat(_params.input2, n, dout_n);
@@ -55,7 +55,7 @@ public class LibMatrixDNNConv2dBackwardDataHelper {
                                NativeHelper.conv2dBackwardDataDense(filterArr, 
dout_n, ret, 1, 
                                                _params.C, _params.H, 
_params.W, _params.K, 
                                                _params.R, _params.S, 
_params.stride_h, _params.stride_w, _params.pad_h, _params.pad_w, _params.P, 
_params.Q, 1);
-                               System.arraycopy(ret, 0, 
_params.output.getDenseBlock(), n*CHW, CHW);
+                               System.arraycopy(ret, 0, 
_params.output.getDenseBlockValues(), n*CHW, CHW);
                        }
                        //multi-threaded nnz maintenance of current working set
                        return _params.output.recomputeNonZeros(_rl, _ru-1);

http://git-wip-us.apache.org/repos/asf/systemml/blob/e6424695/src/main/java/org/apache/sysml/runtime/matrix/data/LibMatrixDNNConv2dBackwardFilterHelper.java
----------------------------------------------------------------------
diff --git 
a/src/main/java/org/apache/sysml/runtime/matrix/data/LibMatrixDNNConv2dBackwardFilterHelper.java
 
b/src/main/java/org/apache/sysml/runtime/matrix/data/LibMatrixDNNConv2dBackwardFilterHelper.java
index 4a94838..f30916c 100644
--- 
a/src/main/java/org/apache/sysml/runtime/matrix/data/LibMatrixDNNConv2dBackwardFilterHelper.java
+++ 
b/src/main/java/org/apache/sysml/runtime/matrix/data/LibMatrixDNNConv2dBackwardFilterHelper.java
@@ -48,7 +48,7 @@ public class LibMatrixDNNConv2dBackwardFilterHelper {
                        dout_n.allocateBlock();
                        LibMatrixDNNRotate180Helper.Rotate180Worker 
rotate180Worker = 
                                        
LibMatrixDNNRotate180Helper.Rotate180Worker.getWorker( _params.input2, dout_n, 
_params, true, false);
-                       double [] ldout_n = dout_n.getDenseBlock();
+                       double [] ldout_n = dout_n.getDenseBlockValues();
                        double [] partRet = new double[CRS*_params.K]; //CRS x K
                        for(int n = _rl; n < _ru; n++) {
                                if( !_params.input1.getSparseBlock().isEmpty(n) 
) {
@@ -108,7 +108,7 @@ public class LibMatrixDNNConv2dBackwardFilterHelper {
                                long t3 = DMLScript.FINEGRAINED_STATISTICS ? 
System.nanoTime() : 0;
                                
                                if( !outMM.isEmptyBlock() ) //accumulate row 
results
-                                       
LibMatrixMult.vectAdd(outMM.getDenseBlock(), partRet, 0, 0, K*CRS);
+                                       
LibMatrixMult.vectAdd(outMM.getDenseBlockValues(), partRet, 0, 0, K*CRS);
                                
                                if(DMLScript.FINEGRAINED_STATISTICS) {
                                        time1 += t2 - t1;
@@ -161,7 +161,7 @@ public class LibMatrixDNNConv2dBackwardFilterHelper {
                                long t3 = DMLScript.FINEGRAINED_STATISTICS ? 
System.nanoTime() : 0;
                                
                                if( !outMM.isEmptyBlock() ) //accumulate row 
results
-                                       
LibMatrixMult.vectAdd(outMM.getDenseBlock(), partRet, 0, 0, K*CRS);
+                                       
LibMatrixMult.vectAdd(outMM.getDenseBlockValues(), partRet, 0, 0, K*CRS);
                                
                                if(DMLScript.FINEGRAINED_STATISTICS) {
                                        time1 += t2 - t1;
@@ -180,14 +180,14 @@ public class LibMatrixDNNConv2dBackwardFilterHelper {
        
        private static void inplaceAdd(double[] a, ConvolutionParameters 
params) {
                synchronized (params.output.denseBlock) {
-                       LibMatrixMult.vectAdd(a, params.output.denseBlock, 0, 
0, a.length);
+                       LibMatrixMult.vectAdd(a, 
params.output.getDenseBlockValues(), 0, 0, a.length);
                }
        }
        
        private static void inplaceTransAdd(double[] a, ConvolutionParameters 
params) {
                synchronized (params.output.denseBlock) {
                        // Perform transposed addition: output of size [K, CRS] 
+= input of size [CRS,K]
-                       double [] c = params.output.denseBlock;
+                       double [] c = params.output.getDenseBlockValues();
                        final int CRS = params.C*params.R*params.S, K = 
params.K;
                        final int blocksizeIJ = 128; //L2 cache
                        

http://git-wip-us.apache.org/repos/asf/systemml/blob/e6424695/src/main/java/org/apache/sysml/runtime/matrix/data/LibMatrixDNNConv2dHelper.java
----------------------------------------------------------------------
diff --git 
a/src/main/java/org/apache/sysml/runtime/matrix/data/LibMatrixDNNConv2dHelper.java
 
b/src/main/java/org/apache/sysml/runtime/matrix/data/LibMatrixDNNConv2dHelper.java
index b390906..3699512 100644
--- 
a/src/main/java/org/apache/sysml/runtime/matrix/data/LibMatrixDNNConv2dHelper.java
+++ 
b/src/main/java/org/apache/sysml/runtime/matrix/data/LibMatrixDNNConv2dHelper.java
@@ -71,11 +71,12 @@ public class LibMatrixDNNConv2dHelper {
                                        }
                                        
                                        // Add the matrix matMultOutBlock of 
shape [K X PQ] to params.output.denseBlock + destPos
-                                       add(matMultOutBlock, 
_params.output.getDenseBlock(), n*K*PQ, K, PQ);
+                                       add(matMultOutBlock, 
_params.output.getDenseBlockValues(), n*K*PQ, K, PQ);
                                }
                                // Add bias to current row if necessary, always 
dense
                                if(_params.bias != null)
-                                       LibMatrixDNNHelper.addBias(n, 
_params.output.getDenseBlock(), _params.bias.getDenseBlock(), K, PQ);
+                                       LibMatrixDNNHelper.addBias(n, 
_params.output.getDenseBlockValues(),
+                                               
_params.bias.getDenseBlockValues(), K, PQ);
                        }
                        if(DMLScript.FINEGRAINED_STATISTICS) {
                                
LibMatrixDNN.loopedConvIm2ColTime.addAndGet(time1);
@@ -109,7 +110,7 @@ public class LibMatrixDNNConv2dHelper {
                                        }
                                }
                                else {
-                                       LibMatrixMult.vectAdd(src.denseBlock, 
dest, 0, destPos, K*PQ);
+                                       
LibMatrixMult.vectAdd(src.getDenseBlockValues(), dest, 0, destPos, K*PQ);
                                }
                        }
                }
@@ -152,11 +153,12 @@ public class LibMatrixDNNConv2dHelper {
                                }
                                
                                // Copy the matrix matMultOutBlock of shape [K 
X PQ] to params.output.denseBlock + destPos
-                               partialCopy1(outMM, 
_params.output.getDenseBlock(), n*K*PQ, K, PQ);
+                               partialCopy1(outMM, 
_params.output.getDenseBlockValues(), n*K*PQ, K, PQ);
                                
                                // Add bias to current row if necessary, always 
dense
                                if(_params.bias != null)
-                                       LibMatrixDNNHelper.addBias(n, 
_params.output.getDenseBlock(), _params.bias.getDenseBlock(), K, PQ);
+                                       LibMatrixDNNHelper.addBias(n, 
_params.output.getDenseBlockValues(),
+                                               
_params.bias.getDenseBlockValues(), K, PQ);
                        }
                        
                        if(DMLScript.FINEGRAINED_STATISTICS) {
@@ -188,7 +190,7 @@ public class LibMatrixDNNConv2dHelper {
                                }
                        }
                        else 
-                               System.arraycopy(src.denseBlock, 0, dest, 
destPos, K * PQ);
+                               System.arraycopy(src.getDenseBlockValues(), 0, 
dest, destPos, K * PQ);
                }
        }
        
@@ -226,7 +228,8 @@ public class LibMatrixDNNConv2dHelper {
                                
                                // Add bias to current row if necessary, always 
dense
                                if(_params.bias != null)
-                                       LibMatrixDNNHelper.addBias(n, 
_params.output.getDenseBlock(), _params.bias.getDenseBlock(), K, PQ);
+                                       LibMatrixDNNHelper.addBias(n, 
_params.output.getDenseBlockValues(),
+                                               
_params.bias.getDenseBlockValues(), K, PQ);
                        }
                        
                        //multi-threaded nnz maintenance of current working set
@@ -240,7 +243,7 @@ public class LibMatrixDNNConv2dHelper {
                        //src is [PQ x K] -> [K x PQ] -> [1 x KPQ]
                        if(src.isInSparseFormat()) {
                                SparseBlock sblock = src.sparseBlock;
-                               double[] c = dest.denseBlock;
+                               double[] c = dest.getDenseBlockValues();
                                for(int i = 0; i < src.getNumRows(); i++) {
                                        if( sblock.isEmpty(i) ) continue;
                                        int apos = sblock.pos(i);
@@ -253,8 +256,8 @@ public class LibMatrixDNNConv2dHelper {
                                }
                        }
                        else {
-                               double[] a = src.denseBlock;
-                               double[] c = dest.denseBlock;
+                               double[] a = src.getDenseBlockValues();
+                               double[] c = dest.getDenseBlockValues();
                                final int blocksizeIJ = 128; //128KB for L2
                                //cache-conscious blocked execution
                                for( int bi = 0; bi < PQ; bi+=blocksizeIJ )
@@ -291,10 +294,10 @@ public class LibMatrixDNNConv2dHelper {
                                        int alen = 
_params.input1.getSparseBlock().size(n);
                                        int[] aix = 
_params.input1.getSparseBlock().indexes(n);
                                        double[] avals = 
_params.input1.getSparseBlock().values(n);
-                                       NativeHelper.conv2dSparse(apos, alen, 
aix, avals, _params.input2.getDenseBlock(), temp, 
+                                       NativeHelper.conv2dSparse(apos, alen, 
aix, avals, _params.input2.getDenseBlockValues(), temp, 
                                                        1, _params.C, 
_params.H, _params.W, _params.K, _params.R, _params.S, 
                                                        _params.stride_h, 
_params.stride_w, _params.pad_h, _params.pad_w, _params.P, _params.Q, 1);
-                                       System.arraycopy(temp, 0, 
_params.output.denseBlock, n*KPQ, KPQ);
+                                       System.arraycopy(temp, 0, 
_params.output.getDenseBlockValues(), n*KPQ, KPQ);
                                }
                        }
                        //multi-threaded nnz maintenance of current working set

http://git-wip-us.apache.org/repos/asf/systemml/blob/e6424695/src/main/java/org/apache/sysml/runtime/matrix/data/LibMatrixDNNHelper.java
----------------------------------------------------------------------
diff --git 
a/src/main/java/org/apache/sysml/runtime/matrix/data/LibMatrixDNNHelper.java 
b/src/main/java/org/apache/sysml/runtime/matrix/data/LibMatrixDNNHelper.java
index ee21ce3..a5564cd 100644
--- a/src/main/java/org/apache/sysml/runtime/matrix/data/LibMatrixDNNHelper.java
+++ b/src/main/java/org/apache/sysml/runtime/matrix/data/LibMatrixDNNHelper.java
@@ -248,15 +248,15 @@ public class LibMatrixDNNHelper {
                public ReluBackward(int rl, int ru, ConvolutionParameters 
params) {
                        _rl = rl; _ru = ru;
                        _params = params;
-                       outputArray= params.output.getDenseBlock();
+                       outputArray= params.output.getDenseBlockValues();
                        numOutCols = params.input1.getNumColumns();
                }
                
                @Override
                public Long call() throws Exception {
                        if(!_params.input1.isInSparseFormat() && 
!_params.input2.isInSparseFormat()) {
-                               double [] inputArr = 
_params.input1.getDenseBlock();
-                               double [] doutArr = 
_params.input2.getDenseBlock();
+                               double [] inputArr = 
_params.input1.getDenseBlockValues();
+                               double [] doutArr = 
_params.input2.getDenseBlockValues();
                                for(int i = _rl*numOutCols; i < _ru*numOutCols; 
i++) {
                                        outputArray[i] = inputArr[i] > 0 ? 
doutArr[i] : 0;
                                }
@@ -293,11 +293,11 @@ public class LibMatrixDNNHelper {
        private static ArrayList<MatrixBlock> splitFilter(ConvolutionParameters 
_params) {
                ArrayList<MatrixBlock> ret = new ArrayList<>();
                int RS = _params.R*_params.S; int CRS = 
_params.C*_params.R*_params.S;
-               double [] filter = _params.input2.getDenseBlock(); int S = 
_params.S;
+               double [] filter = _params.input2.getDenseBlockValues(); int S 
= _params.S;
                for(int c = 0; c < _params.C; c++) {
                        MatrixBlock mb = new MatrixBlock(_params.K, RS, false);
                        mb.allocateDenseBlock(); long nnz = 0;
-                       double [] outputArr = mb.getDenseBlock();
+                       double [] outputArr = mb.getDenseBlockValues();
                        if(filter != null) {
                                for(int k = 0; k < _params.K; k++) {
                                        int outOffset = k*RS;
@@ -348,8 +348,8 @@ public class LibMatrixDNNHelper {
                        ret.sparse = false;
                        if(ret.getDenseBlock() == null)
                                ret.allocateDenseBlock();
-                       NativeHelper.matrixMultDenseDense(m1.denseBlock, 
m2.denseBlock, 
-                               ret.denseBlock, m1.rlen, m1.clen, m2.clen, 1);
+                       
NativeHelper.matrixMultDenseDense(m1.getDenseBlockValues(), 
m2.getDenseBlockValues(),
+                               ret.getDenseBlockValues(), m1.rlen, m1.clen, 
m2.clen, 1);
                }
                
                //no need to maintain nnz exactly, as consumed by other 
operations
@@ -484,7 +484,8 @@ public class LibMatrixDNNHelper {
                        }
                }
                else {
-                       System.arraycopy(input.getDenseBlock(), 
n*input.getNumColumns(), ret, 0, input.getNumColumns());
+                       System.arraycopy(input.getDenseBlockValues(),
+                               n*input.getNumColumns(), ret, 0, 
input.getNumColumns());
                }
        }
        
@@ -500,13 +501,13 @@ public class LibMatrixDNNHelper {
                
                double [] outputArray = null;
                if (!params.output.isInSparseFormat())
-                       outputArray = params.output.getDenseBlock();
+                       outputArray = params.output.getDenseBlockValues();
                else {
                        throw new DMLRuntimeException("Only dense output is 
implemented");
                }
                
                if(!input.isInSparseFormat()) {
-                       double [] inputArray = input.getDenseBlock();
+                       double [] inputArray = input.getDenseBlockValues();
                        doCol2IMDenseInput(0, outputN, inputArray, outputArray, 
params);
                }
                else {

http://git-wip-us.apache.org/repos/asf/systemml/blob/e6424695/src/main/java/org/apache/sysml/runtime/matrix/data/LibMatrixDNNIm2ColHelper.java
----------------------------------------------------------------------
diff --git 
a/src/main/java/org/apache/sysml/runtime/matrix/data/LibMatrixDNNIm2ColHelper.java
 
b/src/main/java/org/apache/sysml/runtime/matrix/data/LibMatrixDNNIm2ColHelper.java
index 1fa863e..bd29848 100644
--- 
a/src/main/java/org/apache/sysml/runtime/matrix/data/LibMatrixDNNIm2ColHelper.java
+++ 
b/src/main/java/org/apache/sysml/runtime/matrix/data/LibMatrixDNNIm2ColHelper.java
@@ -42,13 +42,13 @@ public class LibMatrixDNNIm2ColHelper {
                                        LOG.trace("Using 
DenseIm2colWorkerAllChannels operator to perform "
                                                + "im2col 
(stride1pad0="+stride1Pad0+", allChannels="+allChannels+").");
                                if(allChannels && stride1Pad0 && !trans )
-                                       return new 
DenseIm2colWorkerStride1Pad0AllChannels(input.getDenseBlock(), 
out.getDenseBlock(), params);
+                                       return new 
DenseIm2colWorkerStride1Pad0AllChannels(input.getDenseBlockValues(), 
out.getDenseBlockValues(), params);
                                else if( allChannels )
-                                       return new 
DenseIm2colWorkerAllChannels(input.getDenseBlock(), out.getDenseBlock(), 
params, trans);
+                                       return new 
DenseIm2colWorkerAllChannels(input.getDenseBlockValues(), 
out.getDenseBlockValues(), params, trans);
                                else if( stride1Pad0 )
-                                       return new 
DenseIm2colWorkerStride1Pad0(input.getDenseBlock(), out.getDenseBlock(), 
params);
+                                       return new 
DenseIm2colWorkerStride1Pad0(input.getDenseBlockValues(), 
out.getDenseBlockValues(), params);
                                else
-                                       return new 
DenseIm2colWorker(input.getDenseBlock(), out.getDenseBlock(), params);
+                                       return new 
DenseIm2colWorker(input.getDenseBlockValues(), out.getDenseBlockValues(), 
params);
                        }
                        else {
                                if(LOG.isTraceEnabled()) 

http://git-wip-us.apache.org/repos/asf/systemml/blob/e6424695/src/main/java/org/apache/sysml/runtime/matrix/data/LibMatrixDNNPoolingBackwardHelper.java
----------------------------------------------------------------------
diff --git 
a/src/main/java/org/apache/sysml/runtime/matrix/data/LibMatrixDNNPoolingBackwardHelper.java
 
b/src/main/java/org/apache/sysml/runtime/matrix/data/LibMatrixDNNPoolingBackwardHelper.java
index 1992b79..6e5e978 100644
--- 
a/src/main/java/org/apache/sysml/runtime/matrix/data/LibMatrixDNNPoolingBackwardHelper.java
+++ 
b/src/main/java/org/apache/sysml/runtime/matrix/data/LibMatrixDNNPoolingBackwardHelper.java
@@ -40,8 +40,8 @@ public class LibMatrixDNNPoolingBackwardHelper {
                        _rl = rl; _ru = ru;
                        _params = params;
                        this.performReluBackward = performReluBackward;
-                       inputArray = params.input1.getDenseBlock();
-                       doutArray = params.input2.getDenseBlock();
+                       inputArray = params.input1.getDenseBlockValues();
+                       doutArray = params.input2.getDenseBlockValues();
                        output = params.output;
                        C = params.C; CHW = params.C*params.H*params.W; HW = 
params.H*params.W;
                        P = params.P; Q = params.Q; CPQ = 
params.C*params.P*params.Q;
@@ -52,7 +52,7 @@ public class LibMatrixDNNPoolingBackwardHelper {
                
                @Override
                public Long call() throws Exception {
-                       double[] out = output.getDenseBlock();
+                       double[] out = output.getDenseBlockValues();
                        for(int n = _rl; n < _ru; n++)  {
                                for (int c = 0; c < C; c++) {
                                        final int inputOffset = n*CHW + c*HW;
@@ -86,7 +86,7 @@ public class LibMatrixDNNPoolingBackwardHelper {
                        _rl = rl; _ru = ru;
                        _params = params;
                        this.performReluBackward = performReluBackward;
-                       inputArray = params.input1.getDenseBlock();
+                       inputArray = params.input1.getDenseBlockValues();
                        dout = params.input2;
                        output = params.output;
                        C = params.C; CHW = params.C*params.H*params.W; HW = 
params.H*params.W;
@@ -99,7 +99,7 @@ public class LibMatrixDNNPoolingBackwardHelper {
                
                @Override
                public Long call() throws Exception {
-                       double[] out = output.getDenseBlock();
+                       double[] out = output.getDenseBlockValues();
                        for(int n = _rl; n < _ru; n++)  {
                                if( !dout.sparseBlock.isEmpty(n) ) {
                                        int [] tensorIndexes = new int[3];
@@ -226,8 +226,8 @@ public class LibMatrixDNNPoolingBackwardHelper {
                }
                
                protected void maxpoolingBackward(int[] maxIx, int outOffset, 
int n, int c, int C, int Q, int PQ, int CPQ) {
-                       double[] dout = doutput.getDenseBlock();
-                       double[] out = output.getDenseBlock();
+                       double[] dout = doutput.getDenseBlockValues();
+                       double[] out = output.getDenseBlockValues();
                        final int doutOffset = n*CPQ + c*PQ;
                        for( int pq = 0; pq < PQ; pq++ )
                                out[ outOffset + maxIx[pq] ] += dout[ 
doutOffset + pq ];
@@ -276,7 +276,7 @@ public class LibMatrixDNNPoolingBackwardHelper {
                @Override
                protected void maxpoolingBackward(int[] maxIx, int outOffset, 
int n, int c, int C, int Q, int PQ, int CPQ) {
                        SparseBlock sblock = doutput.getSparseBlock();
-                       double[] out = output.getDenseBlock();
+                       double[] out = output.getDenseBlockValues();
                        if( sblock.isEmpty(n) )
                                return;
                        int apos = sblock.pos(n);

http://git-wip-us.apache.org/repos/asf/systemml/blob/e6424695/src/main/java/org/apache/sysml/runtime/matrix/data/LibMatrixDNNPoolingHelper.java
----------------------------------------------------------------------
diff --git 
a/src/main/java/org/apache/sysml/runtime/matrix/data/LibMatrixDNNPoolingHelper.java
 
b/src/main/java/org/apache/sysml/runtime/matrix/data/LibMatrixDNNPoolingHelper.java
index 3567690..0377c50 100644
--- 
a/src/main/java/org/apache/sysml/runtime/matrix/data/LibMatrixDNNPoolingHelper.java
+++ 
b/src/main/java/org/apache/sysml/runtime/matrix/data/LibMatrixDNNPoolingHelper.java
@@ -46,8 +46,8 @@ public class LibMatrixDNNPoolingHelper {
                        final int HW = _params.H*_params.W;
                        final int CHW = _params.C*_params.H*_params.W;
                        final int CPQ = C*P*Q;
-                       double[] in = _params.input1.getDenseBlock();
-                       double[] out = _params.output.getDenseBlock();
+                       double[] in = _params.input1.getDenseBlockValues();
+                       double[] out = _params.output.getDenseBlockValues();
                        
                        double minValForMaxPoolOperations = 
_params.minValForMaxPoolOperations;
                        
@@ -101,7 +101,7 @@ public class LibMatrixDNNPoolingHelper {
                public SparseMaxPooling(int rl, int ru, ConvolutionParameters 
params) {
                        _rl = rl; _ru = ru;
                        _params = params;
-                       outputArray = params.output.getDenseBlock();
+                       outputArray = params.output.getDenseBlockValues();
                        C = params.C; P = params.P; Q = params.Q; H = params.H; 
                        W = params.W;
                        CPQ = C*P*Q;

http://git-wip-us.apache.org/repos/asf/systemml/blob/e6424695/src/main/java/org/apache/sysml/runtime/matrix/data/LibMatrixDNNRotate180Helper.java
----------------------------------------------------------------------
diff --git 
a/src/main/java/org/apache/sysml/runtime/matrix/data/LibMatrixDNNRotate180Helper.java
 
b/src/main/java/org/apache/sysml/runtime/matrix/data/LibMatrixDNNRotate180Helper.java
index 7a71ced..1ca6ad1 100644
--- 
a/src/main/java/org/apache/sysml/runtime/matrix/data/LibMatrixDNNRotate180Helper.java
+++ 
b/src/main/java/org/apache/sysml/runtime/matrix/data/LibMatrixDNNRotate180Helper.java
@@ -28,7 +28,7 @@ public class LibMatrixDNNRotate180Helper {
                public static Rotate180Worker getWorker(MatrixBlock in, 
MatrixBlock out, 
                        ConvolutionParameters params, boolean 
zeroOutSparseOutput, boolean trans) {
                        if(!in.isInSparseFormat()) 
-                               return new DenseRotate180Worker(in, 
out.getDenseBlock(), params);
+                               return new DenseRotate180Worker(in, 
out.getDenseBlockValues(), params);
                        else
                                return new SparseRotate180Worker(in, out, 
params, trans);
                }
@@ -44,7 +44,7 @@ public class LibMatrixDNNRotate180Helper {
                public DenseRotate180Worker(MatrixBlock input, double [] 
outputArray,  ConvolutionParameters params) {
                        this.outputArray = outputArray;
                        this.params = params;
-                       inputArray = input.getDenseBlock();
+                       inputArray = input.getDenseBlockValues();
                        if(inputArray == null || outputArray == null)
                                throw new RuntimeException("Incorrect usage: 
empty inputs");
                }

http://git-wip-us.apache.org/repos/asf/systemml/blob/e6424695/src/main/java/org/apache/sysml/runtime/matrix/data/LibMatrixDatagen.java
----------------------------------------------------------------------
diff --git 
a/src/main/java/org/apache/sysml/runtime/matrix/data/LibMatrixDatagen.java 
b/src/main/java/org/apache/sysml/runtime/matrix/data/LibMatrixDatagen.java
index 90dda05..d67fb15 100644
--- a/src/main/java/org/apache/sysml/runtime/matrix/data/LibMatrixDatagen.java
+++ b/src/main/java/org/apache/sysml/runtime/matrix/data/LibMatrixDatagen.java
@@ -399,7 +399,7 @@ public class LibMatrixDatagen
                out.allocateDenseBlock();
        
                //compute sequence data
-               double[] c = out.denseBlock;            
+               double[] c = out.getDenseBlockValues();
                double cur = from;
                for(int i=0; i < rows; i++) {
                        c[i] = cur;
@@ -577,7 +577,7 @@ public class LibMatrixDatagen
                                }
                                else {
                                        if (sparsity == 1.0) {
-                                               double[] c = out.denseBlock;
+                                               double[] c = 
out.getDenseBlockValues();
                                                int cix = rowoffset*cols + 
coloffset;
                                                for(int ii = 0; ii < blockrows; 
ii++, cix+=cols)
                                                        for(int jj = 0; jj < 
blockcols; jj++)
@@ -605,7 +605,7 @@ public class LibMatrixDatagen
                                                        }
                                                }
                                                else {
-                                                       double[] c = 
out.denseBlock;
+                                                       double[] c = 
out.getDenseBlockValues();
                                                        int cix = 
rowoffset*cols + coloffset;
                                                        for(int ii = 0; ii < 
blockrows; ii++, cix+=cols)
                                                                for(int jj = 0; 
jj < blockcols; jj++)

http://git-wip-us.apache.org/repos/asf/systemml/blob/e6424695/src/main/java/org/apache/sysml/runtime/matrix/data/LibMatrixMult.java
----------------------------------------------------------------------
diff --git 
a/src/main/java/org/apache/sysml/runtime/matrix/data/LibMatrixMult.java 
b/src/main/java/org/apache/sysml/runtime/matrix/data/LibMatrixMult.java
index e2af752..a90ef5d 100644
--- a/src/main/java/org/apache/sysml/runtime/matrix/data/LibMatrixMult.java
+++ b/src/main/java/org/apache/sysml/runtime/matrix/data/LibMatrixMult.java
@@ -219,7 +219,7 @@ public class LibMatrixMult
                        ret.nonZeros = 0; //reset after execute
                        for( Future<Object> task : taskret ) {
                                if( pm2r )
-                                       vectAdd((double[])task.get(), 
ret.denseBlock, 0, 0, ret.rlen*ret.clen);
+                                       vectAdd((double[])task.get(), 
ret.getDenseBlockValues(), 0, 0, ret.rlen*ret.clen);
                                else
                                        ret.nonZeros += (Long)task.get();
                        }
@@ -329,7 +329,7 @@ public class LibMatrixMult
                        pool.shutdown();
                        //aggregate partial results
                        for( Future<double[]> task : taskret )
-                               vectAdd(task.get(), ret.denseBlock, 0, 0, 
mX.clen);
+                               vectAdd(task.get(), ret.getDenseBlockValues(), 
0, 0, mX.clen);
                }
                catch(Exception ex) {
                        throw new DMLRuntimeException(ex);
@@ -926,9 +926,9 @@ public class LibMatrixMult
        private static void matrixMultDenseDense(MatrixBlock m1, MatrixBlock 
m2, MatrixBlock ret, boolean tm2, boolean pm2, int rl, int ru, int cl, int cu) 
                throws DMLRuntimeException
        {
-               double[] a = m1.denseBlock;
-               double[] b = m2.denseBlock;
-               double[] c = ret.denseBlock;
+               double[] a = m1.getDenseBlockValues();
+               double[] b = m2.getDenseBlockValues();
+               double[] c = ret.getDenseBlockValues();
                final int m = m1.rlen;
                final int n = m2.clen;
                final int cd = m1.clen;
@@ -1113,8 +1113,8 @@ public class LibMatrixMult
        private static void matrixMultDenseSparse(MatrixBlock m1, MatrixBlock 
m2, MatrixBlock ret, boolean pm2, int rl, int ru) 
                throws DMLRuntimeException 
        {
-               double[] a = m1.denseBlock;
-               double[] c = ret.denseBlock;
+               double[] a = m1.getDenseBlockValues();
+               double[] c = ret.getDenseBlockValues();
                int m = m1.rlen;
                int cd = m1.clen;
                int n = m2.clen;
@@ -1183,8 +1183,8 @@ public class LibMatrixMult
                throws DMLRuntimeException
        {
                SparseBlock a = m1.sparseBlock;
-               double[] b = m2.denseBlock;
-               double[] c = ret.denseBlock;
+               double[] b = m2.getDenseBlockValues();
+               double[] c = ret.getDenseBlockValues();
                final int m = m1.rlen;
                final int n = m2.clen;
                final int cd = m2.rlen;
@@ -1390,7 +1390,7 @@ public class LibMatrixMult
        {       
                SparseBlock a = m1.sparseBlock;
                SparseBlock b = m2.sparseBlock;
-               double[] c = ret.denseBlock;
+               double[] c = ret.getDenseBlockValues();
                int m = m1.rlen;
                int cd = m1.clen;
                int n = m2.clen;
@@ -1591,10 +1591,10 @@ public class LibMatrixMult
 
        private static void matrixMultChainDense(MatrixBlock mX, MatrixBlock 
mV, MatrixBlock mW, MatrixBlock ret, ChainType ct, int rl, int ru) 
        {
-               double[] a = mX.denseBlock;
-               double[] b = mV.denseBlock;
-               double[] w = (mW!=null) ? mW.denseBlock : null;
-               double[] c = ret.denseBlock;
+               double[] a = mX.getDenseBlockValues();
+               double[] b = mV.getDenseBlockValues();
+               double[] w = (mW!=null) ? mW.getDenseBlockValues() : null;
+               double[] c = ret.getDenseBlockValues();
                final int cd = mX.clen; //features in X
                boolean weights = (ct == ChainType.XtwXv);
                boolean weights2 = (ct == ChainType.XtXvy);
@@ -1644,9 +1644,9 @@ public class LibMatrixMult
        private static void matrixMultChainSparse(MatrixBlock mX, MatrixBlock 
mV, MatrixBlock mW, MatrixBlock ret, ChainType ct, int rl, int ru) 
        {
                SparseBlock a = mX.sparseBlock;
-               double[] b = mV.denseBlock;
-               double[] w = (mW!=null) ? mW.denseBlock : null;
-               double[] c = ret.denseBlock;
+               double[] b = mV.getDenseBlockValues();
+               double[] w = (mW!=null) ? mW.getDenseBlockValues() : null;
+               double[] c = ret.getDenseBlockValues();
                boolean weights = (ct == ChainType.XtwXv);
                boolean weights2 = (ct == ChainType.XtXvy);
                
@@ -1677,8 +1677,8 @@ public class LibMatrixMult
        {
                //2) transpose self matrix multiply dense
                // (compute only upper-triangular matrix due to symmetry)
-               double[] a = m1.denseBlock;
-               double[] c = ret.denseBlock;
+               double[] a = m1.getDenseBlockValues();
+               double[] c = ret.getDenseBlockValues();
                int m = m1.rlen;
                int n = m1.clen;
                
@@ -1809,7 +1809,7 @@ public class LibMatrixMult
                //2) transpose self matrix multiply sparse
                // (compute only upper-triangular matrix due to symmetry)
                SparseBlock a = m1.sparseBlock;
-               double[] c = ret.denseBlock;
+               double[] c = ret.getDenseBlockValues();
                int m = m1.rlen;
                int n = m1.clen;
 
@@ -1930,9 +1930,9 @@ public class LibMatrixMult
        private static void matrixMultPermuteDense(MatrixBlock pm1, MatrixBlock 
m2, MatrixBlock ret1, MatrixBlock ret2, int rl, int ru) 
                throws DMLRuntimeException
        {
-               double[] a = pm1.denseBlock;
-               double[] b = m2.denseBlock;
-               double[] c = ret1.denseBlock;
+               double[] a = pm1.getDenseBlockValues();
+               double[] b = m2.getDenseBlockValues();
+               double[] c = ret1.getDenseBlockValues();
 
                final int n = m2.clen;
                final int brlen = ret1.getNumRows();
@@ -1953,7 +1953,7 @@ public class LibMatrixMult
                                if( lastblk!=-1 && lastblk<blk ){ 
                                        ret2.sparse = false;
                                        ret2.allocateDenseBlock();
-                                       c = ret2.denseBlock;            
+                                       c = ret2.getDenseBlockValues();
                                }
                
                                //memcopy entire dense row into target position
@@ -1965,8 +1965,8 @@ public class LibMatrixMult
 
        private static void matrixMultPermuteDenseSparse( MatrixBlock pm1, 
MatrixBlock m2, MatrixBlock ret1, MatrixBlock ret2, int rl, int ru)
        {
-               double[] a = pm1.denseBlock;
-               double[] b = m2.denseBlock;
+               double[] a = pm1.getDenseBlockValues();
+               double[] b = m2.getDenseBlockValues();
                SparseBlock c = ret1.sparseBlock;
 
                final int n = m2.clen;
@@ -2002,7 +2002,7 @@ public class LibMatrixMult
 
        private static void matrixMultPermuteSparse( MatrixBlock pm1, 
MatrixBlock m2, MatrixBlock ret1, MatrixBlock ret2, int rl, int ru)
        {
-               double[] a = pm1.denseBlock;
+               double[] a = pm1.getDenseBlockValues();
                SparseBlock b = m2.sparseBlock;
                SparseBlock c = ret1.sparseBlock;
 
@@ -2012,7 +2012,7 @@ public class LibMatrixMult
                for( int i=rl; i<ru; i++ ) 
                {
                        //compute block index and in-block indexes
-                       int pos = UtilFunctions.toInt( a[ i ]); //safe cast     
                
+                       int pos = UtilFunctions.toInt( a[ i ]); //safe cast
                        if( pos > 0 ) //selected row
                        {
                                int bpos = (pos-1) % brlen;
@@ -2036,10 +2036,10 @@ public class LibMatrixMult
 
        private static void matrixMultWSLossDense(MatrixBlock mX, MatrixBlock 
mU, MatrixBlock mV, MatrixBlock mW, MatrixBlock ret, WeightsType wt, int rl, 
int ru)
        {
-               double[] x = mX.denseBlock;
-               double[] u = mU.denseBlock;
-               double[] v = mV.denseBlock;
-               double[] w = (mW!=null)? mW.denseBlock : null;
+               double[] x = mX.getDenseBlockValues();
+               double[] u = mU.getDenseBlockValues();
+               double[] v = mV.getDenseBlockValues();
+               double[] w = (mW!=null)? mW.getDenseBlockValues() : null;
                final int n = mX.clen;
                final int cd = mU.clen;
                double wsloss = 0;
@@ -2111,8 +2111,8 @@ public class LibMatrixMult
        {
                SparseBlock x = mX.sparseBlock;
                SparseBlock w = (mW!=null)? mW.sparseBlock : null;
-               double[] u = mU.denseBlock;
-               double[] v = mV.denseBlock;
+               double[] u = mU.getDenseBlockValues();
+               double[] v = mV.getDenseBlockValues();
                final int n = mX.clen; 
                final int cd = mU.clen;
                double wsloss = 0; 
@@ -2262,7 +2262,7 @@ public class LibMatrixMult
                        }
                        else //DENSE
                        {
-                               double[] w = mW.denseBlock;
+                               double[] w = mW.getDenseBlockValues();
                                
                                for( int i=rl, wix=rl*n; i<ru; i++, wix+=n )
                                        for( int j=0; j<n; j++)
@@ -2295,7 +2295,7 @@ public class LibMatrixMult
                        }
                        else //DENSE
                        {
-                               double[] x = mX.denseBlock;
+                               double[] x = mX.getDenseBlockValues();
                                
                                for( int i=rl, xix=rl*n; i<ru; i++, xix+=n )
                                        for( int j=0; j<n; j++)
@@ -2344,7 +2344,7 @@ public class LibMatrixMult
                                }       
                        }
                        else { //DENSE
-                               double[] x = mX.denseBlock;
+                               double[] x = mX.getDenseBlockValues();
                                for( int i=rl, xix=rl*n; i<ru; i++, xix+=n )
                                        for( int j=0; j<n; j++)
                                                if( x[xix+j] != 0 ) {
@@ -2367,16 +2367,16 @@ public class LibMatrixMult
                matrixMultTransposeSelf(mV, tmp2, true, k);
                ret.quickSetValue(0, 0, ret.quickGetValue(0, 0) + 
                        ((tmp1.sparse || tmp2.sparse) ? dotProductGeneric(tmp1, 
tmp2) :
-                       dotProduct(tmp1.denseBlock, tmp2.denseBlock, 
mU.clen*mU.clen)));
+                       dotProduct(tmp1.getDenseBlockValues(), 
tmp2.getDenseBlockValues(), mU.clen*mU.clen)));
        }
 
        private static void matrixMultWSigmoidDense(MatrixBlock mW, MatrixBlock 
mU, MatrixBlock mV, MatrixBlock ret, WSigmoidType wt, int rl, int ru) 
                throws DMLRuntimeException 
        {       
-               double[] w = mW.denseBlock;
-               double[] c = ret.denseBlock;
-               double[] u = mU.denseBlock;
-               double[] v = mV.denseBlock;
+               double[] w = mW.getDenseBlockValues();
+               double[] c = ret.getDenseBlockValues();
+               double[] u = mU.getDenseBlockValues();
+               double[] v = mV.getDenseBlockValues();
                final int n = mW.clen;
                final int cd = mU.clen;
                
@@ -2413,8 +2413,8 @@ public class LibMatrixMult
        {
                SparseBlock w = mW.sparseBlock;
                SparseBlock c = ret.sparseBlock;
-               double[] u = mU.denseBlock;
-               double[] v = mV.denseBlock;
+               double[] u = mU.getDenseBlockValues();
+               double[] v = mV.getDenseBlockValues();
                final int cd = mU.clen;
                
                boolean flagminus = (wt==WSigmoidType.MINUS || 
wt==WSigmoidType.LOG_MINUS); 
@@ -2469,8 +2469,8 @@ public class LibMatrixMult
                else //DENSE
                {
                        //w and c always in same representation
-                       double[] w = mW.denseBlock;
-                       double[] c = ret.denseBlock;
+                       double[] w = mW.getDenseBlockValues();
+                       double[] c = ret.getDenseBlockValues();
                
                        for( int i=rl, ix=rl*n; i<ru; i++ )
                                for( int j=0; j<n; j++, ix++) {
@@ -2495,11 +2495,11 @@ public class LibMatrixMult
                final int n = mW.clen;
                final int cd = mU.clen;
                
-               double[] w = mW.denseBlock;
-               double[] u = mU.denseBlock;
-               double[] v = mV.denseBlock;
-               double[] x = (mX==null) ? null : mX.denseBlock;
-               double[] c = ret.denseBlock;
+               double[] w = mW.getDenseBlockValues();
+               double[] u = mU.getDenseBlockValues();
+               double[] v = mV.getDenseBlockValues();
+               double[] x = (mX==null) ? null : mX.getDenseBlockValues();
+               double[] c = ret.getDenseBlockValues();
                
                //approach: iterate over non-zeros of w, selective mm 
computation
                //cache-conscious blocking: due to blocksize constraint 
(default 1000),
@@ -2543,9 +2543,9 @@ public class LibMatrixMult
                final int cd = mU.clen;
                
                SparseBlock w = mW.sparseBlock;
-               double[] u = mU.denseBlock;
-               double[] v = mV.denseBlock;
-               double[] c = ret.denseBlock;
+               double[] u = mU.getDenseBlockValues();
+               double[] v = mV.getDenseBlockValues();
+               double[] c = ret.getDenseBlockValues();
                SparseBlock x = (mX==null) ? null : mX.sparseBlock;
                
                //approach: iterate over non-zeros of w, selective mm 
computation
@@ -2555,7 +2555,7 @@ public class LibMatrixMult
                final int blocksizeI = (int) (8L*mW.rlen*mW.clen/mW.nonZeros);
                final int blocksizeJ = left ? 
Math.max(8,Math.min(L2_CACHESIZE/(mU.clen*8), blocksizeI)) : blocksizeI;
                
-               int[] curk = new int[blocksizeI];               
+               int[] curk = new int[blocksizeI];
                boolean[] aligned = (four&&!scalar) ? new boolean[blocksizeI] : 
null;
                
                //blocked execution over row blocks
@@ -2583,7 +2583,7 @@ public class LibMatrixMult
                                        int wpos = w.pos(i);
                                        int wlen = w.size(i);
                                        int[] wix = w.indexes(i);
-                                       double[] wval = w.values(i);            
                
+                                       double[] wval = w.values(i);
                                        
                                        int k = wpos + curk[i-bi];
                                        if( basic ) {
@@ -2632,7 +2632,7 @@ public class LibMatrixMult
                final int cd = mU.clen;
 
                //output always in dense representation
-               double[] c = ret.denseBlock;
+               double[] c = ret.getDenseBlockValues();
                
                //approach: iterate over non-zeros of w, selective mm 
computation
                if( mW.sparse ) //SPARSE
@@ -2665,7 +2665,7 @@ public class LibMatrixMult
                }
                else //DENSE
                {
-                       double[] w = mW.denseBlock;
+                       double[] w = mW.getDenseBlockValues();
                
                        for( int i=rl, ix=rl*n; i<ru; i++, ix+=n )
                                for( int j=cl; j<cu; j++)
@@ -2686,9 +2686,9 @@ public class LibMatrixMult
 
        private static void matrixMultWCeMMDense(MatrixBlock mW, MatrixBlock 
mU, MatrixBlock mV, double eps, MatrixBlock ret, WCeMMType wt, int rl, int ru)
        {
-               double[] w = mW.denseBlock;
-               double[] u = mU.denseBlock;
-               double[] v = mV.denseBlock;
+               double[] w = mW.getDenseBlockValues();
+               double[] u = mU.getDenseBlockValues();
+               double[] v = mV.getDenseBlockValues();
                final int n = mW.clen;
                final int cd = mU.clen;
                double wceval = 0;
@@ -2720,8 +2720,8 @@ public class LibMatrixMult
        private static void matrixMultWCeMMSparseDense(MatrixBlock mW, 
MatrixBlock mU, MatrixBlock mV, double eps, MatrixBlock ret, WCeMMType wt, int 
rl, int ru)
        {
                SparseBlock w = mW.sparseBlock;
-               double[] u = mU.denseBlock;
-               double[] v = mV.denseBlock;
+               double[] u = mU.getDenseBlockValues();
+               double[] v = mV.getDenseBlockValues();
                final int n = mW.clen;
                final int cd = mU.clen;
                double wceval = 0; 
@@ -2730,7 +2730,7 @@ public class LibMatrixMult
                // blocked over ij, while maintaining front of column indexes, 
where the
                // blocksize is chosen such that we reuse each vector on 
average 8 times.
                final int blocksizeIJ = (int) (8L*mW.rlen*mW.clen/mW.nonZeros); 
-               int[] curk = new int[blocksizeIJ];                      
+               int[] curk = new int[blocksizeIJ];
                
                for( int bi=rl; bi<ru; bi+=blocksizeIJ ) {
                        int bimin = Math.min(ru, bi+blocksizeIJ);
@@ -2783,7 +2783,7 @@ public class LibMatrixMult
                }
                else //DENSE
                {
-                       double[] w = mW.denseBlock;
+                       double[] w = mW.getDenseBlockValues();
                
                        for( int i=rl, ix=rl*n; i<ru; i++ )
                                for( int j=0; j<n; j++, ix++) {
@@ -2794,7 +2794,6 @@ public class LibMatrixMult
                                        }
                                }
                }
-               
 
                ret.quickSetValue(0, 0, wceval);
        }
@@ -2802,10 +2801,10 @@ public class LibMatrixMult
        private static void matrixMultWuMMDense(MatrixBlock mW, MatrixBlock mU, 
MatrixBlock mV, MatrixBlock ret, WUMMType wt, ValueFunction fn, int rl, int ru) 
                throws DMLRuntimeException 
        {       
-               double[] w = mW.denseBlock;
-               double[] c = ret.denseBlock;
-               double[] u = mU.denseBlock;
-               double[] v = mV.denseBlock;
+               double[] w = mW.getDenseBlockValues();
+               double[] c = ret.getDenseBlockValues();
+               double[] u = mU.getDenseBlockValues();
+               double[] v = mV.getDenseBlockValues();
                final int n = mW.clen;
                final int cd = mU.clen;
                
@@ -2841,8 +2840,8 @@ public class LibMatrixMult
        {
                SparseBlock w = mW.sparseBlock;
                SparseBlock c = ret.sparseBlock;
-               double[] u = mU.denseBlock;
-               double[] v = mV.denseBlock;
+               double[] u = mU.getDenseBlockValues();
+               double[] v = mV.getDenseBlockValues();
                final int cd = mU.clen;
                
                boolean flagmult = (wt==WUMMType.MULT); 
@@ -2895,8 +2894,8 @@ public class LibMatrixMult
                else //DENSE
                {
                        //w and c always in same representation
-                       double[] w = mW.denseBlock;
-                       double[] c = ret.denseBlock;
+                       double[] w = mW.getDenseBlockValues();
+                       double[] c = ret.getDenseBlockValues();
                
                        for( int i=rl, ix=rl*n; i<ru; i++ )
                                for( int j=0; j<n; j++, ix++) {
@@ -3527,7 +3526,7 @@ public class LibMatrixMult
                if( ret.rlen != ret.clen )
                        throw new RuntimeException("Invalid non-squared input 
matrix.");
                
-               final double[] c = ret.denseBlock;
+               final double[] c = ret.getDenseBlockValues();
                final int n = ret.rlen;
                long nnz = 0;
                
@@ -3780,7 +3779,7 @@ public class LibMatrixMult
                        if( !_pm2r )
                                return _ret.recomputeNonZeros(rl, ru-1, cl, 
cu-1);
                        else
-                               return _ret.getDenseBlock();
+                               return _ret.getDenseBlockValues();
                }
        }
 
@@ -3819,8 +3818,7 @@ public class LibMatrixMult
                        //NOTE: we dont do global aggregation from concurrent 
tasks in order
                        //to prevent synchronization (sequential aggregation 
led to better 
                        //performance after JIT)
-                       
-                       return ret.getDenseBlock();
+                       return ret.getDenseBlockValues();
                }
        }
 

http://git-wip-us.apache.org/repos/asf/systemml/blob/e6424695/src/main/java/org/apache/sysml/runtime/matrix/data/LibMatrixNative.java
----------------------------------------------------------------------
diff --git 
a/src/main/java/org/apache/sysml/runtime/matrix/data/LibMatrixNative.java 
b/src/main/java/org/apache/sysml/runtime/matrix/data/LibMatrixNative.java
index 524218d..51a79e1 100644
--- a/src/main/java/org/apache/sysml/runtime/matrix/data/LibMatrixNative.java
+++ b/src/main/java/org/apache/sysml/runtime/matrix/data/LibMatrixNative.java
@@ -62,8 +62,8 @@ public class LibMatrixNative {
                        ret.sparse = false;
                        ret.allocateDenseBlock();
                        long start = DMLScript.STATISTICS ? System.nanoTime() : 
0;
-                       if (NativeHelper.matrixMultDenseDense(m1.denseBlock, 
m2.denseBlock, 
-                                       ret.denseBlock, m1.getNumRows(), 
m1.getNumColumns(), m2.getNumColumns(), k)) {
+                       if 
(NativeHelper.matrixMultDenseDense(m1.getDenseBlockValues(), 
m2.getDenseBlockValues(),
+                                       ret.getDenseBlockValues(), 
m1.getNumRows(), m1.getNumColumns(), m2.getNumColumns(), k)) {
                                if(DMLScript.STATISTICS) {
                                        Statistics.nativeLibMatrixMultTime += 
System.nanoTime() - start;
                                        
Statistics.numNativeLibMatrixMultCalls.increment();
@@ -100,7 +100,8 @@ public class LibMatrixNative {
                        setNumThreads(params);
                        if(params.bias == null) {
                                long start = DMLScript.STATISTICS ? 
System.nanoTime() : 0;
-                               int nnz = 
NativeHelper.conv2dDense(input.denseBlock, filter.denseBlock, 
outputBlock.denseBlock, params.N, params.C, params.H, params.W, 
+                               int nnz = 
NativeHelper.conv2dDense(input.getDenseBlockValues(), 
filter.getDenseBlockValues(),
+                                               
outputBlock.getDenseBlockValues(), params.N, params.C, params.H, params.W, 
                                                params.K, params.R, params.S, 
params.stride_h, params.stride_w, params.pad_h, params.pad_w, 
                                                params.P, params.Q, 
params.numThreads);
                                if(nnz != -1) {
@@ -121,7 +122,8 @@ public class LibMatrixNative {
                                if(params.bias.isInSparseFormat())
                                        params.bias.sparseToDense(); // Bias 
matrix is usually extremely small
                                long start = DMLScript.STATISTICS ? 
System.nanoTime() : 0;
-                               int nnz = 
NativeHelper.conv2dBiasAddDense(input.denseBlock, params.bias.denseBlock, 
filter.denseBlock, outputBlock.denseBlock, 
+                               int nnz = 
NativeHelper.conv2dBiasAddDense(input.getDenseBlockValues(), 
params.bias.getDenseBlockValues(),
+                                               filter.getDenseBlockValues(), 
outputBlock.getDenseBlockValues(),
                                                params.N, params.C, params.H, 
params.W, 
                                                params.K, params.R, params.S, 
params.stride_h, params.stride_w, params.pad_h, params.pad_w, 
                                                params.P, params.Q, 
params.numThreads);
@@ -166,7 +168,8 @@ public class LibMatrixNative {
                if(NativeHelper.isNativeLibraryLoaded() && 
!dout.isInSparseFormat() && !input.isInSparseFormat()) {
                        setNumThreads(params);
                        long start = DMLScript.STATISTICS ? System.nanoTime() : 
0;
-                       int nnz = 
NativeHelper.conv2dBackwardFilterDense(input.denseBlock, dout.denseBlock, 
outputBlock.denseBlock, params.N, params.C, params.H, params.W, 
+                       int nnz = 
NativeHelper.conv2dBackwardFilterDense(input.getDenseBlockValues(), 
dout.getDenseBlockValues(),
+                                       outputBlock.getDenseBlockValues(), 
params.N, params.C, params.H, params.W, 
                                        params.K, params.R, params.S, 
params.stride_h, params.stride_w, params.pad_h, params.pad_w, 
                                        params.P, params.Q, params.numThreads);
                        if(nnz != -1) {
@@ -202,7 +205,8 @@ public class LibMatrixNative {
                if(NativeHelper.isNativeLibraryLoaded() && 
!dout.isInSparseFormat() && !filter.isInSparseFormat()) {
                        setNumThreads(params);
                        long start = DMLScript.STATISTICS ? System.nanoTime() : 
0;
-                       int nnz = 
NativeHelper.conv2dBackwardDataDense(filter.denseBlock, dout.denseBlock, 
outputBlock.denseBlock, params.N, params.C, params.H, params.W, 
+                       int nnz = 
NativeHelper.conv2dBackwardDataDense(filter.getDenseBlockValues(), 
dout.getDenseBlockValues(),
+                                       outputBlock.getDenseBlockValues(), 
params.N, params.C, params.H, params.W, 
                                        params.K, params.R, params.S, 
params.stride_h, params.stride_w, params.pad_h, params.pad_w, 
                                        params.P, params.Q, params.numThreads);
                        if(nnz != -1) {

http://git-wip-us.apache.org/repos/asf/systemml/blob/e6424695/src/main/java/org/apache/sysml/runtime/matrix/data/LibMatrixOuterAgg.java
----------------------------------------------------------------------
diff --git 
a/src/main/java/org/apache/sysml/runtime/matrix/data/LibMatrixOuterAgg.java 
b/src/main/java/org/apache/sysml/runtime/matrix/data/LibMatrixOuterAgg.java
index 37a55ba..2c9f476 100644
--- a/src/main/java/org/apache/sysml/runtime/matrix/data/LibMatrixOuterAgg.java
+++ b/src/main/java/org/apache/sysml/runtime/matrix/data/LibMatrixOuterAgg.java
@@ -288,8 +288,8 @@ public class LibMatrixOuterAgg
         * @param outVal output matrix block
         * @param uaggOp aggregate unary operator
         */
-       public static void resetOutputMatix(MatrixIndexes in1Ix, MatrixBlock 
in1Val, MatrixIndexes outIx, MatrixBlock outVal, AggregateUnaryOperator uaggOp) 
-       {               
+       public static void resetOutputMatrix(MatrixIndexes in1Ix, MatrixBlock 
in1Val, MatrixIndexes outIx, MatrixBlock outVal, AggregateUnaryOperator uaggOp) 
+       {
                if(uaggOp.indexFn instanceof ReduceCol) {
                        outIx.setIndexes(in1Ix.getRowIndex(), 1); 
                        outVal.reset(in1Val.getNumRows(), 2, false);
@@ -396,7 +396,7 @@ public class LibMatrixOuterAgg
         */
        private static void uaRowSumGtLe(MatrixBlock in, MatrixBlock out, 
double[] bv, BinaryOperator bOp) 
                        throws DMLRuntimeException
-       {               
+       {
                int agg0 = sumRowSumGtLeColSumLtGe(0.0, bv, bOp);
                int m = in.rlen;
                
@@ -459,7 +459,7 @@ public class LibMatrixOuterAgg
         */
        private static void uaColSumGtLe(MatrixBlock in1Val, MatrixBlock 
outVal, double[] bv, BinaryOperator bOp) 
                        throws DMLRuntimeException
-       {               
+       {
                if (in1Val.isInSparseFormat())
                        s_uaColSumGtLe(in1Val, outVal, bv, bOp);
                else
@@ -870,26 +870,26 @@ public class LibMatrixOuterAgg
 
                //allocate and initialize output values (not indices) 
                out.allocateDenseBlock(true);
-               Arrays.fill(out.getDenseBlock(), 0, out.getNumColumns(), agg0);
-               if(agg0 != 0.0)
-                       out.setNonZeros(out.getNumColumns());
+               if(agg0 != 0.0) {
+                       out.getDenseBlock().set(0, 1, 0, out.clen, agg0);
+                       out.setNonZeros(out.clen);
+               }
                
                if( in.isEmptyBlock(false) )
                        return;
-                       
-               SparseBlock sblock = in.getSparseBlock();               
+               
+               SparseBlock sblock = in.getSparseBlock();
                for( int j = 0; j < sblock.numRows(); j++)
                if( !sblock.isEmpty(j) ) {
                        int apos = sblock.pos(j);
                        int alen = sblock.size(j);
                        int[] aix = sblock.indexes(j);
                        double [] avals = sblock.values(j);
-                       
                        for (int i=apos; i < apos+alen; i++) {
                                int cnt = sumRowSumGtLeColSumLtGe(avals[i], bv, 
bOp);
                                out.quickSetValue(0, aix[i], cnt);
                        }
-               }               
+               }
        }
 
        /**
@@ -927,29 +927,29 @@ public class LibMatrixOuterAgg
                        throws DMLRuntimeException
        {
                int agg0 = sumRowSumLtGeColSumGtLe(0.0, bv, bOp);
-
+               
                //allocate and initialize output values (not indices) 
                out.allocateDenseBlock(true);
-               Arrays.fill(out.getDenseBlock(), 0, out.getNumColumns(), agg0);
-               if(agg0 != 0.0)
+               if(agg0 != 0.0) {
+                       out.getDenseBlock().set(0, 1, 0, out.clen, agg0);
                        out.setNonZeros(out.getNumColumns());
+               }
                
                if( in.isEmptyBlock(false) )
                        return;
-                       
-               SparseBlock sblock = in.getSparseBlock();               
+               
+               SparseBlock sblock = in.getSparseBlock();
                for (int j = 0; j < sblock.numRows(); j++)
                if( !sblock.isEmpty(j) ) {
                        int apos = sblock.pos(j);
                        int alen = sblock.size(j);
                        int[] aix = sblock.indexes(j);
                        double [] avals = sblock.values(j);
-                       
                        for (int i=apos; i < apos+alen; i++) {
                                int cnt = sumRowSumLtGeColSumGtLe(avals[i], bv, 
bOp);
                                out.quickSetValue(0, aix[i], cnt);
                        }
-               }               
+               }
        }
 
        /**
@@ -990,26 +990,26 @@ public class LibMatrixOuterAgg
 
                //allocate and initialize output values (not indices) 
                out.allocateDenseBlock(true);
-               Arrays.fill(out.getDenseBlock(), 0, out.getNumColumns(), agg0);
-               if(agg0 != 0.0)
+               if(agg0 != 0.0) {
+                       out.getDenseBlock().set(0, 1, 0, out.clen, agg0);
                        out.setNonZeros(out.getNumColumns());
+               }
                
                if( in.isEmptyBlock(false) )
                        return;
-                       
-               SparseBlock sblock = in.getSparseBlock();               
+               
+               SparseBlock sblock = in.getSparseBlock();
                for (int j = 0; j < sblock.numRows(); j++)
                if( !sblock.isEmpty(j) ) {
                        int apos = sblock.pos(j);
                        int alen = sblock.size(j);
                        int[] aix = sblock.indexes(j);
                        double [] avals = sblock.values(j);
-                       
                        for (int i=apos; i < apos+alen; i++) {
                                int cnt = sumEqNe(avals[i], bv, bOp);
                                out.quickSetValue(0, aix[i], cnt);
                        }
-               }               
+               }
        }
 
        

http://git-wip-us.apache.org/repos/asf/systemml/blob/e6424695/src/main/java/org/apache/sysml/runtime/matrix/data/LibMatrixReorg.java
----------------------------------------------------------------------
diff --git 
a/src/main/java/org/apache/sysml/runtime/matrix/data/LibMatrixReorg.java 
b/src/main/java/org/apache/sysml/runtime/matrix/data/LibMatrixReorg.java
index 8cf20ed..e8a7bd6 100644
--- a/src/main/java/org/apache/sysml/runtime/matrix/data/LibMatrixReorg.java
+++ b/src/main/java/org/apache/sysml/runtime/matrix/data/LibMatrixReorg.java
@@ -136,7 +136,7 @@ public class LibMatrixReorg
                //we don't need to create a copy, given our copy on write 
semantics.
                //however, note that with update in-place this would be an 
invalid optimization
                if( SHALLOW_COPY_REORG && !in.sparse && !out.sparse && 
(in.rlen==1 || in.clen==1)  ) {
-                       out.denseBlock = in.denseBlock;
+                       out.denseBlock = 
DenseBlockFactory.createDenseBlock(in.getDenseBlockValues(), in.clen, in.rlen);
                        return out;
                }
                
@@ -207,7 +207,7 @@ public class LibMatrixReorg
                        blklen += (blklen%8 != 0)?8-blklen%8:0;
                        for( int i=0; i<k & i*blklen<len; i++ )
                                tasks.add(new TransposeTask(in, out, row, 
i*blklen, Math.min((i+1)*blklen, len), cnt));
-                       List<Future<Object>> taskret = pool.invokeAll(tasks);   
+                       List<Future<Object>> taskret = pool.invokeAll(tasks);
                        pool.shutdown();
                        for( Future<Object> task : taskret )
                                task.get();
@@ -286,12 +286,12 @@ public class LibMatrixReorg
                                MatrixBlock outblk2 = new MatrixBlock(blklen2, 
inblk.getNumColumns(), inblk.isInSparseFormat());
                                MatrixBlock tmp2 = 
tmpblk.sliceOperations(iposCut+1, tmpblk.getNumRows()-1, 0, 
tmpblk.getNumColumns()-1, new MatrixBlock());
                                outblk2.leftIndexingOperations(tmp2, 0, 
tmp2.getNumRows()-1, 0, tmpblk.getNumColumns()-1, outblk2, 
UpdateType.INPLACE_PINNED);
-                               out.add(new IndexedMatrixValue(outix2, 
outblk2));               
+                               out.add(new IndexedMatrixValue(outix2, 
outblk2));
                        }
                }
        }
 
-       public static MatrixBlock diag( MatrixBlock in, MatrixBlock out ) 
+       public static MatrixBlock diag( MatrixBlock in, MatrixBlock out )
                throws DMLRuntimeException
        {
                //Timing time = new Timing(true);
@@ -341,7 +341,7 @@ public class LibMatrixReorg
                        if( !sparse && clen == 1 ) { //DENSE COLUMN VECTOR
                                //in-place quicksort, unstable (no indexes 
needed)
                                out.copy( in ); //dense
-                               Arrays.sort(out.denseBlock);
+                               Arrays.sort(out.getDenseBlockValues());
                                if( desc )
                                        sortReverseDense(out);
                                return out;
@@ -351,7 +351,7 @@ public class LibMatrixReorg
                {
                        if( in.isEmptyBlock(false) ) { //EMPTY INPUT BLOCK
                                out.allocateDenseBlock(false);
-                               double[] c = out.getDenseBlock();
+                               double[] c = out.getDenseBlockValues();
                                for( int i=0; i<rlen; i++ )
                                        c[i] = i+1; //seq(1,n)
                                return out;
@@ -391,7 +391,7 @@ public class LibMatrixReorg
                        if( !sparse ) { //DENSE
                                out.allocateDenseBlock(false);
                                for( int i=0; i<rlen; i++ )
-                                       System.arraycopy(in.denseBlock, 
vix[i]*clen, out.denseBlock, i*clen, clen);
+                                       
System.arraycopy(in.getDenseBlockValues(), vix[i]*clen, 
out.getDenseBlockValues(), i*clen, clen);
                        }
                        else { //SPARSE
                                out.allocateSparseRowsBlock(false);
@@ -477,7 +477,7 @@ public class LibMatrixReorg
         * @throws DMLRuntimeException if DMLRuntimeException occurs
         */
        public static ArrayList<IndexedMatrixValue> reshape( IndexedMatrixValue 
in, MatrixCharacteristics mcIn, 
-                       ArrayList<IndexedMatrixValue> out, 
MatrixCharacteristics mcOut, boolean rowwise )       
+                       ArrayList<IndexedMatrixValue> out, 
MatrixCharacteristics mcOut, boolean rowwise )
                throws DMLRuntimeException
        {
                //prepare inputs
@@ -524,7 +524,7 @@ public class LibMatrixReorg
                        if( rows )
                                ret.reset(1, in.clen, in.sparse);
                        else //cols
-                               ret.reset(in.rlen, 1, in.sparse);       
+                               ret.reset(in.rlen, 1, in.sparse);
                        return ret;
                }
                
@@ -743,8 +743,8 @@ public class LibMatrixReorg
                final int n = in.clen;
                final int n2 = out.clen;
                
-               double[] a = in.getDenseBlock();
-               double[] c = out.getDenseBlock();
+               double[] a = in.getDenseBlockValues();
+               double[] c = out.getDenseBlockValues();
                
                if( m==1 || n==1 ) //VECTOR TRANSPOSE
                {
@@ -785,7 +785,7 @@ public class LibMatrixReorg
                final int n2 = out.clen;
                final int ennz2 = (int) (in.nonZeros/m2); 
                
-               double[] a = in.getDenseBlock();
+               double[] a = in.getDenseBlockValues();
                SparseBlock c = out.getSparseBlock();
                
                if( out.rlen == 1 ) //VECTOR-VECTOR
@@ -806,7 +806,7 @@ public class LibMatrixReorg
                                        int bimin = Math.min(bi+blocksizeI, m);
                                        int bjmin = Math.min(bj+blocksizeJ, n);
                                        //core transpose operation
-                                       for( int i=bi; i<bimin; i++ )           
                
+                                       for( int i=bi; i<bimin; i++ )
                                                for( int j=bj, aix=i*n+bj; 
j<bjmin; j++, aix++ )
                                                {
                                                        c.allocate(j, ennz2, 
n2); 
@@ -887,7 +887,7 @@ public class LibMatrixReorg
                final int n2 = out.clen;
                
                SparseBlock a = in.getSparseBlock();
-               double[] c = out.getDenseBlock();
+               double[] c = out.getDenseBlockValues();
                
                if( m==1 ) //ROW VECTOR TRANSPOSE
                {
@@ -992,8 +992,8 @@ public class LibMatrixReorg
                out.nonZeros = in.nonZeros;
                out.allocateDenseBlock(false);
                
-               double[] a = in.getDenseBlock();
-               double[] c = out.getDenseBlock();
+               double[] a = in.getDenseBlockValues();
+               double[] c = out.getDenseBlockValues();
                
                //copy all rows into target positions
                if( n == 1 ) { //column vector
@@ -1116,7 +1116,7 @@ public class LibMatrixReorg
                        //since the physical representation of dense matrices 
is always the same,
                        //we don't need to create a copy, given our copy on 
write semantics.
                        //however, note that with update in-place this would be 
an invalid optimization
-                       out.denseBlock = in.denseBlock;
+                       out.denseBlock = 
DenseBlockFactory.createDenseBlock(in.getDenseBlockValues(), rows, cols);
                        return;
                }
                
@@ -1124,8 +1124,8 @@ public class LibMatrixReorg
                out.allocateDenseBlock(false);
                
                //dense reshape
-               double[] a = in.denseBlock;
-               double[] c = out.denseBlock;
+               double[] a = in.getDenseBlockValues();
+               double[] c = out.getDenseBlockValues();
                
                if( rowwise )
                {
@@ -1157,7 +1157,7 @@ public class LibMatrixReorg
                                        {
                                                int ai = aix2%rlen;
                                                int aj = aix2/rlen;
-                                               c[ cix++ ] = a[ ai*clen+aj ];   
                        
+                                               c[ cix++ ] = a[ ai*clen+aj ];
                                        }                       
                                //index conversion c[i,j]<- a[k,l]: 
                                // k = (rows*j+i)%rlen
@@ -1313,7 +1313,7 @@ public class LibMatrixReorg
                int estnnz = (int) (in.nonZeros/rows);
                
                //sparse reshape
-               double[] a = in.denseBlock;
+               double[] a = in.getDenseBlockValues();
                SparseBlock c = out.sparseBlock;
                
                if( rowwise )
@@ -1384,7 +1384,7 @@ public class LibMatrixReorg
                
                //sparse/dense reshape
                SparseBlock a = in.sparseBlock;
-               double[] c = out.denseBlock;
+               double[] c = out.getDenseBlockValues();
                
                if( rowwise )
                {
@@ -1564,7 +1564,7 @@ public class LibMatrixReorg
                
                int rlen = in.rlen;
                int clen = in.clen;
-               double[] a = in.denseBlock;
+               double[] a = in.getDenseBlockValues();
                
                //append all values to right blocks
                MatrixIndexes ixtmp = new MatrixIndexes();
@@ -1714,7 +1714,7 @@ public class LibMatrixReorg
                                        rlen2 += (flags[i] = !a.isEmpty(i)) ? 1 
: 0;
                        }
                        else { //DENSE
-                               double[] a = in.denseBlock;
+                               double[] a = in.getDenseBlockValues();
                                for(int i=0, aix=0; i<m; i++, aix+=n)
                                        for(int j=0; j<n; j++)
                                                if( a[aix+j] != 0 ) {
@@ -1758,8 +1758,8 @@ public class LibMatrixReorg
                else if( !in.sparse && !ret.sparse )  //DENSE <- DENSE
                {
                        ret.allocateDenseBlock();
-                       double[] a = in.denseBlock;
-                       double[] c = ret.denseBlock;
+                       double[] a = in.getDenseBlockValues();
+                       double[] c = ret.getDenseBlockValues();
                        
                        for( int i=0, aix=0, cix=0; i<m; i++, aix+=n )
                                if( flags[i] ) {
@@ -1770,7 +1770,7 @@ public class LibMatrixReorg
                else //SPARSE <- DENSE
                {
                        ret.allocateSparseRowsBlock();
-                       double[] a = in.denseBlock;
+                       double[] a = in.getDenseBlockValues();
                        
                        for( int i=0, aix=0, cix=0; i<m; i++, aix+=n )
                                if( flags[i] ) {
@@ -1816,15 +1816,14 @@ public class LibMatrixReorg
                        }
                        else //DENSE
                        {
-                               double[] a = in.denseBlock;
-                               
+                               double[] a = in.getDenseBlockValues();
                                for(int i=0, aix=0; i<m; i++)
                                        for(int j=0; j<n; j++, aix++)
                                                if( a[aix] != 0 )
-                                                       flags[j] = true;        
+                                                       flags[j] = true;
                        }
                } 
-               else {                  
+               else {
                        flags = DataConverter.convertToBooleanVector(select);
                }
 
@@ -1881,8 +1880,8 @@ public class LibMatrixReorg
                        else if( !in.sparse && !ret.sparse )  //DENSE <- DENSE
                        {
                                ret.allocateDenseBlock();
-                               double[] a = in.denseBlock;
-                               double[] c = ret.denseBlock;
+                               double[] a = in.getDenseBlockValues();
+                               double[] c = ret.getDenseBlockValues();
                                
                                for(int i=0, aix=0, lcix=0; i<m; i++, 
lcix+=clen2)
                                        for(int j=0; j<n; j++, aix++)
@@ -1892,7 +1891,7 @@ public class LibMatrixReorg
                        else //SPARSE <- DENSE
                        {
                                ret.allocateSparseRowsBlock();
-                               double[] a = in.denseBlock;
+                               double[] a = in.getDenseBlockValues();
                                
                                for(int i=0, aix=0; i<m; i++)
                                        for(int j=0; j<n; j++, aix++)
@@ -2060,7 +2059,7 @@ public class LibMatrixReorg
                                tmp[i] = in.quickGetValue(ixin+i, 0);
                }
                else { //DENSE
-                       System.arraycopy(in.denseBlock, ixin, tmp, 0, len);
+                       System.arraycopy(in.getDenseBlockValues(), ixin, tmp, 
0, len);
                }
                
                //init index array
@@ -2078,7 +2077,7 @@ public class LibMatrixReorg
         */
        private static void sortReverseDense( MatrixBlock m1 ) {
                int rlen = m1.rlen;
-               double[] a = m1.denseBlock;
+               double[] a = m1.getDenseBlockValues();
                for( int i=0; i<rlen/2; i++ ) {
                        double tmp = a[i];
                        a[i] = a[rlen - i -1];

Reply via email to