diff --git a/src/BayesWaveLikelihood.c b/src/BayesWaveLikelihood.c
index 773a47ee82fd9f972f89174859841e783a8124b8..4af2c3bddda93585c97a56125d0aaff28f6190e2 100644
--- a/src/BayesWaveLikelihood.c
+++ b/src/BayesWaveLikelihood.c
@@ -165,7 +165,7 @@ void recompute_residual(struct Data *data, struct Model **model, struct Chain *c
       for(j=1; j<=model_x->signal[0]->size; j++)
       {
         i = model_x->signal[0]->index[j];
-        model_x->wavelet(model_x->signal[0]->templates, model_x->signal[0]->intParams[i], N, 1, data->Tobs);
+        for(ip=0; ip<NP; ip++) model_x->wavelet(model_x->signal[ip]->templates, model_x->signal[ip]->intParams[i], N, 1, data->Tobs);
       }
 
       combinePolarizations(data, model_x->signal, model_x->h, model_x->extParams, model_x->Npol);
diff --git a/src/BayesWaveMCMC.c b/src/BayesWaveMCMC.c
index dd20b8589650b234417f51637c3ab4bb742f20ee..defaf95a23c930bf3903ef4c4fbe46e81ab911f5 100644
--- a/src/BayesWaveMCMC.c
+++ b/src/BayesWaveMCMC.c
@@ -74,6 +74,20 @@ static void catch_alarm(UNUSED int sig, UNUSED siginfo_t *siginfo,UNUSED void *c
 }
 
 
+void constrain_hplus_hcross(struct Wavelet **wave, int i)
+{
+  /*
+   give hx special treatment (wavelets at same TFQ as h+, but independenta A,phi
+   */
+  wave[1]->intParams[i][0] = wave[0]->intParams[i][0]; //t0
+  wave[1]->intParams[i][1] = wave[0]->intParams[i][1]; //f0
+  wave[1]->intParams[i][2] = wave[0]->intParams[i][2]; //Q
+  if(wave[0]->dimension > 5)
+  {
+    wave[1]->intParams[i][5] = wave[0]->intParams[i][5]; //beta (~fdot for chirplets)
+  }
+}
+
 static void restart_sampler(struct Data *data, struct Chain *chain, struct Prior *prior, struct Model **model, char modelname[])
 {
   int i,j,n;
@@ -113,26 +127,11 @@ static void restart_sampler(struct Data *data, struct Chain *chain, struct Prior
   if(data->adaptTemperatureFlag)// && data->runPhase!=0)
   {
     chain->temperature[chain->NC-1] = 1.0e6;
-    //chain->dT[0] = pow(chain->temperature[chain->NC-1],(1./(double)(NC-1)));
-    //chain->dT[0] = pow(chain->temperature[chain->NC-1],(1./(double)(NC-1))*(1./(double)(NC-1))*(1./(double)(NC-1)));
     chain->dT[0] = pow(chain->temperature[chain->NC-1],(1./(double)(NC-1))*(1./(double)(NC-1)));
-    //chain->dT[0] = pow(chain->temperature[chain->NC-1],(1./(double)(NC-1)));
+
     for(ic=0; ic<chain->NC-1; ic++)
     {
-      //if(chain->NC==15)
-      //{
-        //chain->temperature[ic]=chain->temperature[ic-1]*chain->dT[0];
-        //TODO: DO better initializing chain temperature ladder (hard-wired for NCmax=15!)
-        //chain->temperature[ic]=exp((double)(ic*ic)/(double)(((chain->NC-1)*(chain->NC-1))/(log(1.0e6)))); //empirically determined initial guess for temp spacing
-
-        //chain->temperature[ic] = 1./(1.0 - 0.07*(double)ic);
-      //}
-      //else
-      //{
-        //chain->temperature[ic] = pow(chain->dT[0],ic*ic*ic);
-        chain->temperature[ic] = pow(chain->dT[0],ic*ic);
-        //chain->temperature[ic] = pow(chain->dT[0],ic);
-      //}
+      chain->temperature[ic] = pow(chain->dT[0],ic);
     }
 
   }
@@ -182,8 +181,6 @@ static void restart_sampler(struct Data *data, struct Chain *chain, struct Prior
     if(data->signalFlag)
     {
       extrinsic_uniform_proposal(chain->seed,model[ic]->extParams);
-      //FIXME: Fix ugly psi=0 hack for unpolarized case
-      if(!data->polarizationFlag) model[ic]->extParams[2] = 0.0;
 
       /*
        WaveformProject() was split into two functions:
@@ -210,6 +207,9 @@ static void restart_sampler(struct Data *data, struct Chain *chain, struct Prior
           if(data->amplitudePriorFlag)
             data->signal_amplitude_proposal(signal[n]->intParams[j], model[ic]->SnGeo, chain->seed, data->Tobs, prior->range, prior->sSNRpeak);
           
+          //void constrain_hplus_hcross(struct Wavelet **wave, int i)
+          if(n==1)constrain_hplus_hcross(signal, j);
+          
           model[ic]->wavelet(signal[n]->templates, signal[n]->intParams[j], data->N, 1, Tobs);
         }
       }
@@ -511,10 +511,10 @@ static void resume_sampler(struct Data *data, struct Chain *chain, struct Model
           fprintf(stderr,"        Exiting to system (1)\n");
           exit(1);
         }
-        parse_signal_parameters(data, model[ic], fptr2, h);
-        for(n=0; n<data->Npol; n++) fclose(fptr2[n]);
-        free(fptr2);
       }
+      parse_signal_parameters(data, model[ic], fptr2, h);
+      for(n=0; n<data->Npol; n++) fclose(fptr2[n]);
+      free(fptr2);
     }
 
     // PSD model
@@ -1579,22 +1579,6 @@ static void add_wavelet(struct Wavelet *wave_x, struct Wavelet *wave_y, int *ii)
   *ii = index;
 }
 
-void constrain_hplus_hcross(struct Wavelet **wave, int i)
-{
-  /*
-   give hx special treatment (wavelets at same TFQ as h+, but independenta A,phi
-   */
-  wave[1]->intParams[i][0] = wave[0]->intParams[i][0]; //t0
-  wave[1]->intParams[i][1] = wave[0]->intParams[i][1]; //f0
-  wave[1]->intParams[i][2] = wave[0]->intParams[i][2]; //Q
-//  printf("A+   = %g, Ax   = %g\n",wave[0]->intParams[i][3],wave[1]->intParams[i][3]); //A
-//  printf("Phi+ = %g, Phix = %g\n",wave[0]->intParams[i][4],wave[1]->intParams[i][4]); //A
-  if(wave[0]->dimension > 5)
-  {
-    wave[1]->intParams[i][5] = wave[0]->intParams[i][5]; //beta (~fdot for chirplets)
-  }
-}
-
 /**************************************************************/
 
 void EvolveIntrinsicParameters(struct Data *data, struct Prior *prior, struct Model **model, struct Chain *chain, struct TimeFrequencyMap *tf, gsl_rng *seed, int ic)
@@ -1838,12 +1822,21 @@ void EvolveIntrinsicParameters(struct Data *data, struct Prior *prior, struct Mo
               larrayy = wave_y[n]->index;
 
               q = 0.0;
-              if(det==-1)q += ClusterRate*TFtoProx*TFprop_density(paramsx[ii], range, tf, data->NI);
-              else       q += ClusterRate*TFtoProx*TFprop_density(paramsx[ii], range, tf, det);
+              if(det==-1)
+              {
+                if(n==0)
+                {
+                  q += ClusterRate*TFtoProx*TFprop_density(paramsx[ii], range, tf, data->NI);
+                }
+              }
+              else q += ClusterRate*TFtoProx*TFprop_density(paramsx[ii], range, tf, det);
 
-              q += ClusterRate*(1.-TFtoProx)*wavelet_proximity_density(paramsx[ii][1], paramsx[ii][0], paramsy, larrayy, wave_y[n]->size, prior);
-              q += (1.0-ClusterRate)/prior->TFV;
-              logqx += log(q);
+              if(n==0 || det > -1)
+              {
+                q += ClusterRate*(1.-TFtoProx)*wavelet_proximity_density(paramsx[ii][1], paramsx[ii][0], paramsy, larrayy, wave_y[n]->size, prior);
+                q += (1.0-ClusterRate)/prior->TFV;
+                logqx += log(q);
+              }
               logqy +=  0.0;
             }
           }
@@ -1853,7 +1846,7 @@ void EvolveIntrinsicParameters(struct Data *data, struct Prior *prior, struct Mo
             //loop over Npol for signal model, single IFO (nmax=nmin+1) for glitch model
             for(n=nmin; n<nmax; n++)
             {
-              logqx += -prior->logTFV;
+              if(n==0 || det >-1) logqx += -prior->logTFV;
               logqy += 0.0;
             }
           }
@@ -1935,14 +1928,31 @@ void EvolveIntrinsicParameters(struct Data *data, struct Prior *prior, struct Mo
               larrayx = wave_x[n]->index;
               larrayy = wave_y[n]->index;
 
-              if(det==-1)q += ClusterRate*TFtoProx*TFprop_density(paramsy[ii], range, tf, data->NI);
-              else       q += ClusterRate*TFtoProx*TFprop_density(paramsy[ii], range, tf, det);
-              
-              q += ClusterRate*(1.-TFtoProx)*wavelet_proximity_density(paramsy[ii][1], paramsy[ii][0], paramsx, larrayx, wave_x[n]->size, prior);
-              q += (1.0-ClusterRate)/prior->TFV;
-              
-              logqy += log(q);
-              logqx +=  0.0;
+              //signal model
+              if(det==-1)
+              {
+                //only evaluate TFQ proposal for h+ polarization (TFQ are not free parameters for hx)
+                if(n==0)
+                {
+                  q += ClusterRate*TFtoProx*TFprop_density(paramsy[ii], range, tf, data->NI);
+                  q += ClusterRate*(1.-TFtoProx)*wavelet_proximity_density(paramsy[ii][1], paramsy[ii][0], paramsx, larrayx, wave_x[n]->size, prior);
+                  q += (1.0-ClusterRate)/prior->TFV;
+                  
+                  logqy += log(q);
+                  logqx +=  0.0;
+                }
+              }
+              //glitch model
+              else
+              {
+                q += ClusterRate*TFtoProx*TFprop_density(paramsy[ii], range, tf, det);
+                
+                q += ClusterRate*(1.-TFtoProx)*wavelet_proximity_density(paramsy[ii][1], paramsy[ii][0], paramsx, larrayx, wave_x[n]->size, prior);
+                q += (1.0-ClusterRate)/prior->TFV;
+                
+                logqy += log(q);
+                logqx +=  0.0;
+              }
             }
           }//end TF density proposal
           
@@ -1959,7 +1969,7 @@ void EvolveIntrinsicParameters(struct Data *data, struct Prior *prior, struct Mo
             //loop over Npol for signal model, single IFO (nmax=nmin+1) for glitch model
             for(n=nmin; n<nmax; n++)
             {
-              logqy += -prior->logTFV;
+              if(n==0 || det>-1) logqy += -prior->logTFV;
               logqx += 0.0;
             }
           }//end uniform TF density proposal
@@ -2136,6 +2146,11 @@ void EvolveIntrinsicParameters(struct Data *data, struct Prior *prior, struct Mo
               if(det==-1)
               {
                 intrinsic_fisher_proposal(model_x, range, paramsx[ii], paramsy[ii], model_x->SnGeo, &logqx, &logqy, seed, data->Tobs, &test, wave_y[n]->dimension, tfqFlag);
+
+                //rely on (mostly) symmetry of proposal
+                //   -proposal got tricky for h+,hx case because
+                //    t,f,Q are fixed to h+
+                logqx=logqy=0.0;
               }
               
               else
@@ -2230,8 +2245,11 @@ void EvolveIntrinsicParameters(struct Data *data, struct Prior *prior, struct Mo
           // uniform prior on time-frequency volume
           else
           {
-            wave_x[n]->logp += -(double)(wave_x[n]->size)*prior->logTFV;
-            wave_y[n]->logp += -(double)(wave_y[n]->size)*prior->logTFV;
+            if(n==0 || det>-1)
+            {
+              wave_x[n]->logp += -(double)(wave_x[n]->size)*prior->logTFV;
+              wave_y[n]->logp += -(double)(wave_y[n]->size)*prior->logTFV;
+            }
           }
         }//end loop over n
 
@@ -2276,8 +2294,11 @@ void EvolveIntrinsicParameters(struct Data *data, struct Prior *prior, struct Mo
         {
           if(data->waveletPriorFlag)
           {
-            wave_x[n]->logp += prior->Nwavelet[wave_x[n]->size];
-            wave_y[n]->logp += prior->Nwavelet[wave_y[n]->size];
+            if(n==0 || det>-1)
+            {
+              wave_x[n]->logp += prior->Nwavelet[wave_x[n]->size];
+              wave_y[n]->logp += prior->Nwavelet[wave_y[n]->size];
+            }
           }
         }
 
@@ -2290,6 +2311,7 @@ void EvolveIntrinsicParameters(struct Data *data, struct Prior *prior, struct Mo
       logH += logqx - logqy;                                               //proposal density
       for(n=nmin; n<nmax; n++) logH += wave_y[n]->logp - wave_x[n]->logp;  //prior ratio
 
+      
       /*
        if(model_x->size != model_y->size)
        {
@@ -2301,7 +2323,7 @@ void EvolveIntrinsicParameters(struct Data *data, struct Prior *prior, struct Mo
       }
        */ 
 
-      //if(chain->index[ic]==0 && data->stochasticFlag)printf("logLy=%g logLx=%g Ay=%g Ax=%g detC=%g logH=%g\n",model_y->logL-data->logLc,model_x->logL-data->logLc,model_x->background->logamp,model_y->background->logamp, model_y->background->detCij[data->N/4],logH);
+      //if(ic==0 && data->stochasticFlag)printf("logLy=%g logLx=%g Ay=%g Ax=%g detC=%g logH=%g\n",model_y->logL-data->logLc,model_x->logL-data->logLc,model_x->background->logamp,model_y->background->logamp, model_y->background->detCij[data->N/4],logH);
 
     }// end prior test condition
     else logH = -1.0e60; // Rejection sample at prior boundaries
@@ -2402,8 +2424,6 @@ void EvolveExtrinsicParameters(struct Data *data, struct Prior *prior, struct Mo
 
   //Initialize parameter vectors & likelihood for extrinsic parameter MCMC
   for(i=0; i<NE; i++)  paramsy[i] = paramsx[i];
-  //FIXME: Fix ugly psi=0 hack for unpolarized case
-  if(!data->polarizationFlag) paramsy[2] = paramsx[2] = 0.0;
 
   //TODO: Why can't I use a band-limited response for xtrinsic moves?
   //Related to computeProjectionCoeffs()?
@@ -2496,8 +2516,6 @@ void EvolveExtrinsicParameters(struct Data *data, struct Prior *prior, struct Mo
       }
     }
     if(!data->extrinsicAmplitudeFlag) paramsy[5]=1.0;
-    //FIXME: Fix ugly psi=0 hack for unpolarized case
-    if(!data->polarizationFlag) paramsy[2] = paramsx[2] = 0.0;
 
     //Rescale intrinsic amplitudes and phases with extrinsic parameters
     for(i=1; i<ienddim; i++)
diff --git a/src/BayesWavePrior.c b/src/BayesWavePrior.c
index 0ebf2a5c9b4dad5852b18ad8a8a9c0ccb7bc75b5..8421dd5b7d65d0082e7dee4958b2aa9e8853c899 100644
--- a/src/BayesWavePrior.c
+++ b/src/BayesWavePrior.c
@@ -130,14 +130,11 @@ int extrinsic_checkrange(double *p)
   if(p[1] < -1.0 || p[1] >= 1.0) return 1;
 
 
-  //psi ranges from [0,pi/2]
-  while(p[2]<0.0 || p[2] >= LAL_PI_2)
+  //psi ranges from [0,pi]
+  while(p[2]<0.0 || p[2] >= LAL_PI)
   {
-    if(p[2]<0.0) p[2] += LAL_PI_2;
-    else         p[2] -= LAL_PI_2;
-
-    //psi->psi+pi/2 needs phi->phi+pi
-    p[4] += LAL_PI;
+    if(p[2]<0.0) p[2] += LAL_PI;
+    else         p[2] -= LAL_PI;
   }
 
   //TODO: ellipticity should be periodic?
diff --git a/src/BayesWaveProposal.c b/src/BayesWaveProposal.c
index 3422911e2cd07912688a4bdea04d5b7fedb0456d..a2ced926414ea9d19b6ee0dec6f86597bd830b77 100644
--- a/src/BayesWaveProposal.c
+++ b/src/BayesWaveProposal.c
@@ -216,7 +216,7 @@ void uniform_orientation_proposal(double *y, gsl_rng *seed)
   double newPsi,newPhi,newEcc;
 
   newPhi = uniform_draw(seed)*LAL_TWOPI;
-  newPsi = uniform_draw(seed)*LAL_PI_2;
+  newPsi = uniform_draw(seed)*LAL_PI;
   newEcc = -1. + 2.*uniform_draw(seed);
 
   y[2] = newPsi;
diff --git a/src/BayesWaveToLALPSD.c b/src/BayesWaveToLALPSD.c
index 3c2a79fef1e80cd5a96de29b42ba4c727fa2eacb..7cc955fef770e493ee63e102f2b2308ae7b413ce 100644
--- a/src/BayesWaveToLALPSD.c
+++ b/src/BayesWaveToLALPSD.c
@@ -34,8 +34,17 @@
 int main(int argc, char* argv[])
 {
 
+  if(argc<2)
+  {
+    fprintf(stdout,"USAGE: BayesWaveToLALPSD IFO [runName]\n");
+    return 0;
+  }
+
   FILE *waveFile=NULL;
   char filename[1024];
+  char ifoname[4];
+  
+  sprintf(ifoname,"%s",argv[1]);
 
   int i,n;
 
@@ -62,8 +71,8 @@ int main(int argc, char* argv[])
   {
 
     //sprintf(filename,"BayesWave_PSD_%s_clean_psd_%i.dat.0",argv[1],i);
-    if(argc==2)sprintf(filename,"waveforms/%s_clean_psd_%i.dat.0",argv[1],i);
-    else       sprintf(filename,"waveforms/clean_psd_%i.dat.0",i);
+    if(argc==3)sprintf(filename,"waveforms/%s_clean_psd_%s_%i.dat",argv[2],ifoname,i);
+    else       sprintf(filename,"waveforms/clean_psd_%s_%i.dat",ifoname,i);
 
     waveFile=fopen(filename,"r");
     if(waveFile==NULL)
@@ -96,14 +105,18 @@ int main(int argc, char* argv[])
     fclose(waveFile);
   }
 
+
+  sprintf(filename,"%s_psd_intervals.dat",ifoname);
+  FILE *outfile = fopen(filename,"w");
   
-  if(argc==2)sprintf(filename,"%s_IFO0_asd_median.dat",argv[1]);
-  else       sprintf(filename,"IFO0_asd_median.dat");
+  sprintf(filename,"%s_psd_median.dat",ifoname);
+  FILE *outfile2 = fopen(filename,"w");
 
-  FILE *outfile = fopen("psd_intervals.dat","w");
-  FILE *outfile2 = fopen("psd_median.dat","w");
+  if(argc==3)sprintf(filename,"%s_%s_asd_median.dat",argv[2],ifoname);
+  else       sprintf(filename,"%s_asd_median.dat",ifoname);
   FILE *outfile3 = fopen(filename,"w");
 
+
   if(outfile3==NULL)printf("Failed to open %s\n",filename);  
  
   double median,upper90,lower90,upper50,lower50;
diff --git a/src/BayesWaveWavelet.c b/src/BayesWaveWavelet.c
index 61fdd778c8b1bc327ea6bcf230f481e5736ba21a..ba663125d2da0b1d332a246be672c7cdc28d096e 100644
--- a/src/BayesWaveWavelet.c
+++ b/src/BayesWaveWavelet.c
@@ -22,8 +22,10 @@
 #include <math.h>
 
 #include "BayesWave.h"
+#include "BayesLine.h"
 #include "BayesWaveMath.h"
 #include "BayesWaveWavelet.h"
+#include "BayesWaveIO.h"
 
 
 /* ********************************************************************************** */