diff --git a/meldata.cc b/meldata.cc
index 0bc26f53c6dad003413cc9431e5cb54c855d7f65..0cc5452f046ad9b2a8fe64685e9dd564d5afcad6 100644
--- a/meldata.cc
+++ b/meldata.cc
@@ -144,7 +144,7 @@ namespace Melodic{
 	
     tmp = expand_dimred(mixMatrix);
     tmpT = zeros(tmp.Nrows()/numfiles, tmp.Ncols());
-    tmpS = zeros(numfiles, tmp.Ncols());
+    tmpS = ones(numfiles, tmp.Ncols());
 
 	outMsize("tmp",tmp);
 	outMsize("tmpT",tmpT);
@@ -153,49 +153,60 @@ namespace Melodic{
   	dbgmsg(string("   approach ") << opts.approach.value() << endl);	
 
 	if(opts.approach.value()!=string("concat")){
-		message("Calculating T- and S-modes " << endl);
-    	explained_var = krfact(tmp,tmpT,tmpS);
-    	if(opts.approach.value()==string("tica")){		
-    		Tmodes.clear(); Smodes.clear();
-    		for(int ctr = 1; ctr <= tmp.Ncols(); ctr++){
-				tmpT3 << reshape(tmp.Column(ctr),tmpT.Nrows(),numfiles);
-				outMsize("tmpT3", tmpT3);
-      			tmpT2 << tmpT.Column(ctr);
-      			tmpS2 << tmpS.Column(ctr);
-				tmpT3 << SP(tmpT3,pow(ones(tmpT3.Nrows(),1)*tmpS2.t(),-1));
-				if(numfiles>1)
-					tmpT2 |= tmpT3;
-				if(mean(tmpS2,1).AsScalar()<0){
-					tmpT2*=-1.0;
-					tmpS2*=-1.0;
-				}
-      			add_Tmodes(tmpT2);
-      			add_Smodes(tmpS2);
+      message("Calculating T- and S-modes " << endl);
+      explained_var = krfact(tmp,tmpT,tmpS);
+      Tmodes.clear(); Smodes.clear();
+      for(int ctr = 1; ctr <= tmp.Ncols(); ctr++){
+	    tmpT3 << reshape(tmp.Column(ctr),tmpT.Nrows(),numfiles);
+		outMsize("tmpT3", tmpT3);
+      	tmpT2 << tmpT.Column(ctr);
+      	tmpS2 << tmpS.Column(ctr);
+		tmpT3 << SP(tmpT3,pow(ones(tmpT3.Nrows(),1)*tmpS2.t(),-1));
+		if(numfiles>1)
+	      tmpT2 |= tmpT3;
+		if(mean(tmpS2,1).AsScalar()<0){
+		  tmpT2*=-1.0;
+		  tmpS2*=-1.0;
 		}
-	
-	//add GLM OLS fit
-	if(Tdes.Storage()){
-		Matrix alltcs = Tmodes.at(0).Column(1);
-		for(int ctr=1; ctr < (int)Tmodes.size();ctr++)
-			alltcs|=Tmodes.at(ctr).Column(1);
-		if((alltcs.Nrows()==Tdes.Nrows())&&(Tdes.Nrows()>Tdes.Ncols()))
-			glmT.olsfit(alltcs,Tdes,Tcon);
-	}
-	if(Sdes.Storage()){
-		Matrix alltcs = Smodes.at(0);
-		for(int ctr=1; ctr < (int)Smodes.size();ctr++)
-			alltcs|=Smodes.at(ctr);
-		if((alltcs.Nrows()==Sdes.Nrows())&&(Sdes.Nrows()>Sdes.Ncols()&&alltcs.Nrows()>2))
-			glmS.olsfit(alltcs,Sdes,Scon);
+      	add_Tmodes(tmpT2);
+      	add_Smodes(tmpS2);
+	  }
 	}
-	
-    }
 	else{
-		add_Tmodes(tmp);
+		Tmodes.clear();
+		Smodes.clear();
+		for(int ctr = 1; ctr <= tmp.Ncols(); ctr++){
+			tmpT3 << tmp.Column(ctr);
+			add_Tmodes(tmpT3);
+		}
 	}
+    if(opts.approach.value()!=string("concat")){
+	  //add GLM OLS fit
+	  dbgmsg(string(" GLM fitting ") << endl);
+
+	  if(Tdes.Storage()){
+	    Matrix alltcs = Tmodes.at(0).Column(1);
+	    for(int ctr=1; ctr < (int)Tmodes.size();ctr++)
+		  alltcs|=Tmodes.at(ctr).Column(1);
+	    if((alltcs.Nrows()==Tdes.Nrows())&&(Tdes.Nrows()>Tdes.Ncols()))
+		  glmT.olsfit(alltcs,Tdes,Tcon);
+	  }
+	  if(Sdes.Storage()){
+	    Matrix alltcs = Smodes.at(0);
+	    for(int ctr=1; ctr < (int)Smodes.size();ctr++)
+	  	  alltcs|=Smodes.at(ctr);
+	    if((alltcs.Nrows()==Sdes.Nrows())&&(Sdes.Nrows()>Sdes.Ncols()&&alltcs.Nrows()>2))
+		  glmS.olsfit(alltcs,Sdes,Scon);
+	  }
+		
+    }
+  //    else{
+//		dbgmsg(string(" Bypassing krfac ") << endl);
+//        add_Tmodes(tmp);
+//		add_Smodes(tmpS);
+//      }
 	
-	dbgmsg(string("END: set_TSmode"));
-	}
+	dbgmsg(string("END: set_TSmode"));	
   }
 
   void MelodicData::setup()
@@ -233,6 +244,11 @@ namespace Melodic{
 			if(tmpData.Ncols() == alldat.Ncols() && tmpData.Nrows() == alldat.Nrows())
       			alldat += tmpData;	
 			else{
+				    if(opts.approach.value()==string("tica")){
+						cerr << "ERROR:: data dimensions do not match, TICA not possible \n\n";
+						exit(2); 
+					}
+					
 					if(tmpData.Ncols() == alldat.Ncols()){
 						int mindim = min(alldat.Nrows(),tmpData.Nrows());
 						alldat = alldat.Rows(1,mindim);
@@ -511,6 +527,7 @@ namespace Melodic{
       }
      
     //Output T- & S-modes
+ 
     save_Tmodes();
     save_Smodes();
 
diff --git a/meldata.h b/meldata.h
index c4e04602b4ad0c94b5ce8d01b1860d4ee018ff25..902183482fc464742a8de7c1666456e69442a808 100644
--- a/meldata.h
+++ b/meldata.h
@@ -90,8 +90,11 @@ namespace Melodic{
       inline void save_Tmodes(){
 			if(Tmodes.size()>0){
 				Matrix tmp = Tmodes.at(0); 
-				for(unsigned int ctr = 1; ctr < Tmodes.size(); ctr++)
-	  			tmp |= Tmodes.at(ctr);
+				outMsize("tmp",tmp);
+				for(unsigned int ctr = 1; ctr < Tmodes.size(); ctr++){
+					outMsize("Tmodes ",Tmodes.at(ctr));
+     	  			tmp |= Tmodes.at(ctr);
+				}
 				saveascii(tmp,opts.outputfname.value() + "_Tmodes");
 			}
       }