diff --git a/meldata.cc b/meldata.cc
index 3b86f30295777a5aa23e2b917fb7f9acfd7b6aa4..b35fef8e13412812e907f6a8747ec70bf55680f2 100644
--- a/meldata.cc
+++ b/meldata.cc
@@ -620,7 +620,7 @@ namespace Melodic{
     message("Creating new PEs, DOF and sigmasquareds ... " << endl);
     // First, save all the old files
     volume4D<float> tmpvol, old_dof;
-    Matrix pemaps;
+    Matrix pemaps, old_ssq;
     volumeinfo tmpvolinfo;
     int pe_ctr = 1;
     while(fsl_imageexists(opts.glmcleanup.value() + "/stats/pe" + num2str(pe_ctr)))
@@ -631,8 +631,11 @@ namespace Melodic{
 	else pemaps = pemaps & tmpvol.matrix(Mask);
 	pe_ctr++;
       }
+
     read_volume4D(tmpvol,opts.glmcleanup.value() + "/stats/sigmasquareds",tmpvolinfo);
     save_volume4D(tmpvol,opts.glmcleanup.value() + "/stats/old_sigmasquareds",tmpvolinfo);
+    old_ssq = tmpvol.matrix(Mask);
+
     if(fsl_imageexists(opts.glmcleanup.value() + "/stats/dof"))
       {
 	read_volume4D(old_dof,opts.glmcleanup.value() + "/stats/dof",tmpvolinfo);
@@ -696,10 +699,9 @@ namespace Melodic{
     
     allmaps = pemaps & threshmaps;
 
-    outMsize("    allmaps ",allmaps);
+    outMsize(" size of pes and thresholded maps: ",allmaps);
     //outMsize("    orig_data ",orig_data);
 
-    allmaps = pemaps & threshmaps;
     alltcs = ( orig_data * allmaps.t() ) * pinv (allmaps * allmaps.t() ); 
     
     //outMsize("    alltcs",alltcs);
@@ -713,8 +715,11 @@ namespace Melodic{
     sigsq = sum(SP(resi,resi)) / R.Trace(); 
     //outMsize("  ... new sigmasquareds :",sigsq);
     
-    Matrix new_dof;
-    new_dof = old_dof.matrix(Mask);
+    Matrix new_dof, new_dof2;
+    new_dof  = old_dof.matrix(Mask);
+    new_dof2 = old_dof.matrix(Mask);
+
+    // Calculate new_dof
     for(int j_ctr=1;j_ctr<=threshmaps.Ncols();j_ctr++)
       for(int i_ctr=1;i_ctr<=threshmaps.Nrows();i_ctr++)
 	if(abs(threshmaps(i_ctr,j_ctr)) > 0)
@@ -722,6 +727,12 @@ namespace Melodic{
     //outMsize("  ... new DOFs :", new_dof);
     message(" ... done " << endl); 
     
+
+    // Calculate new_dof2
+    //    for(int j_ctr=1;j_ctr<=threshmaps.Ncols();j_ctr++)
+    //  for(int i_ctr=1;i_ctr<=threshmaps.Nrows();i_ctr++)
+    new_dof2 = SP(new_dof2,SP(sigsq,pow(old_ssq,-1)));
+
     //save out new GLM results
     message(" Saving results ... ");
     tmpvol.setmatrix(sigsq,Mask);
@@ -729,13 +740,16 @@ namespace Melodic{
     
     for(int tmp_ctr=1;tmp_ctr<=pemaps.Nrows(); tmp_ctr++){
       tmpvol.setmatrix(pemaps.Row(tmp_ctr),Mask);
-      save_volume4D(tmpvol,opts.glmcleanup.value() + "/stats/pe" + num2str(tmp_ctr));
+      save_volume4D(tmpvol,opts.glmcleanup.value()+"/stats/pe"+num2str(tmp_ctr));
     }
     tmpvol.setmatrix(new_dof,Mask);
     save_volume4D(tmpvol,opts.glmcleanup.value() + "/stats/dof");
+   
+    tmpvol.setmatrix(new_dof2,Mask);
+    save_volume4D(tmpvol,opts.glmcleanup.value() + "/stats/dof2");
+   
     message(" ... done " << endl);
     message(endl << " finished GLM cleanup ! " << endl << endl);
-   
   }
 
   Matrix MelodicData::calc_FFT(const Matrix& Mat)