Index: libs/libmythtv/dvbchannel.cpp
===================================================================
--- libs/libmythtv/dvbchannel.cpp	(revision 10453)
+++ libs/libmythtv/dvbchannel.cpp	(working copy)
@@ -689,6 +689,7 @@
     }
 
     tune_time.start();
+    cur_tuning = tuning;
 
     if (fd_frontend < 0)
     {
@@ -776,7 +777,7 @@
 
         wait_for_backend(fd_frontend, 5 /* msec */);
 
-        prev_tuning.params = tuning.params;
+        prev_tuning = tuning;
         first_tune = false;
     }
 
@@ -787,7 +788,7 @@
 
 bool DVBChannel::Retune(void)
 {
-    return Tune(prev_tuning, true, 0, true);
+    return Tune(cur_tuning, true, 0, true);
 }
 
 /** \fn DVBChannel::GetTuningParams(DVBTuning& tuning) const
Index: libs/libmythtv/dvbtypes.h
===================================================================
--- libs/libmythtv/dvbtypes.h	(revision 10453)
+++ libs/libmythtv/dvbtypes.h	(working copy)
@@ -325,6 +325,9 @@
     struct dvb_fe_params params;
     char                 polariz;
 
+    DVBTuning& operator=(const DVBTuning& op)
+        { params = op.params; polariz = op.polariz; return *this; }
+    
     bool equalQPSK(const DVBTuning& other, uint range = 0) const
         { return equal_qpsk(params, other.params, range);  }
     bool equalATSC(const DVBTuning& other, uint range = 0) const
