diff -U 3 -H -d -r -N -- channelscan-0.6.1-orig/.directory channelscan-0.6.1/.directory
--- channelscan-0.6.1-orig/.directory	1970-01-01 03:00:00.000000000 +0300
+++ channelscan-0.6.1/.directory	2010-03-23 13:52:11.000000000 +0300
@@ -0,0 +1,5 @@
+[Dolphin]
+Timestamp=2010,3,23,13,46,41
+
+[Settings]
+ShowDotFiles=true
diff -U 3 -H -d -r -N -- channelscan-0.6.1-orig/Makefile channelscan-0.6.1/Makefile
--- channelscan-0.6.1-orig/Makefile	2010-03-23 13:52:11.000000000 +0300
+++ channelscan-0.6.1/Makefile	2010-03-23 13:52:11.000000000 +0300
@@ -8,7 +8,17 @@
 # By default the main source file also carries this name.
 #
 
+# if REELVDR is defined, some hardware and software dependencies will be
+# aktivated for REELBOX lite
+
+
+### The version number of this plugin (taken from the main source file):
+VERSION = $(shell grep 'static const char \*VERSION *=' channelscan.h | awk '{ print $$6 }' | sed -e 's/[";]//g')
+
+### The C++ compiler and options:
 
+CXX      ?= ccache g++
+CXXFLAGS = -fPIC -O2 -Wall -Woverloaded-virtual -fno-strict-aliasing
 
 ### The directory environment:
 
@@ -16,34 +26,118 @@
 LIBDIR = ../../lib
 TMPDIR = /tmp
 
-
-LDFLAGS = -lbz2 -lz
-
 ### Allow user defined options to overwrite defaults:
 
+ifdef REELVDR
+PLUGIN = channelscan
+else
+PLUGIN = reelchannelscan
+endif
+
 -include $(VDRDIR)/Make.config
 
+### The version number of VDR (taken from VDR's "config.h"):
+
+APIVERSION = $(shell grep 'define APIVERSION ' $(VDRDIR)/config.h | awk '{ print $$3 }' | sed -e 's/"//g')
+
+### The name of the distribution archive:
+
+ARCHIVE = $(PLUGIN)-$(VERSION)
+PACKAGE = vdr-$(ARCHIVE)
+
+### Includes and Defines (add further entries here):
+
+INCLUDES += -I$(VDRDIR)/include -I../../$(DVBDIR)/include
+
+#DEFINES += -D_GNU_SOURCE -DPLUGIN_NAME_I18N='"$(PLUGIN)"' -DVDRDIR=\"$(VDRDIR)\" -DDEBUG_CHANNELSCAN
+DEFINES += -D_GNU_SOURCE -DPLUGIN_NAME_I18N='"$(PLUGIN)"' -DVDRDIR=\"$(VDRDIR)\" -DBOOST_IOSTREAMS_NO_LIB -DNDEBUG -D__KERNEL_STRICT_NAMES -D__KERNEL_STRICT_NAMES
 
 ifdef REELVDR
-OBJS = channelscan.o csmenu.o dirfiles.o filter.o i18n.o scan.o transponders.o channellistbackupmenu.o rotortools.o
-else
-OBJS = channelscan.o csmenu.o filter.o i18n.o scan.o transponders.o channellistbackupmenu.o rotortools.o
+  DEFINES += -DREELVDR
 endif
 
+ifeq ($(shell test -f $(VDRDIR)/PLUGINS/src/rotor/rotor.h; echo $$?),0)
+  DEFINES += -DHAVE_ROTOR
+endif
+
+### causes segfaults Premiere Direkt sometimes
+#DEFINES += -DWITH_EIT
+
+
+### The object files (add further files here):
+
 ifdef REELVDR
-PLUGIN = channelscan
+OBJS = channelscan.o csmenu.o dirfiles.o filter.o i18n.o scan.o transponders.o zlib.o bzip2.o channellistbackupmenu.o
 else
-PLUGIN = reelchannelscan
+OBJS = channelscan.o csmenu.o filter.o i18n.o scan.o transponders.o channellistbackupmenu.o
 endif
 
--include $(VDRDIR)/Make.common
 
-DEFINES += -DNDEBUG
+### Targets:
+plug: libvdr-$(PLUGIN).so
 
-INCLUDES += -I../../$(DVBDIR)/include
+all: libvdr-$(PLUGIN).so i18n
 
-ifeq ($(shell test -f $(VDRDIR)/PLUGINS/src/rotor/rotor.h; echo $$?),0)
-  DEFINES += -DHAVE_ROTOR
-endif
+### Implicit rules:
+
+%.o: %.c
+	$(CXX) $(CXXFLAGS) -c $(DEFINES) $(INCLUDES) $<
+
+# Dependencies:
+
+MAKEDEP = $(CXX) -MM -MG
+DEPFILE = .dependencies
+$(DEPFILE): Makefile
+	@$(MAKEDEP) $(DEFINES) $(INCLUDES) $(OBJS:%.o=%.c) > $@
+
+-include $(DEPFILE)
+
+### Internationalization (I18N):
+
+PODIR     = po
+LOCALEDIR = $(VDRDIR)/locale
+I18Npo    = $(wildcard $(PODIR)/*.po)
+I18Nmsgs  = $(addprefix $(LOCALEDIR)/, $(addsuffix /LC_MESSAGES/vdr-$(PLUGIN).mo, $(notdir $(foreach file, $(I18Npo), $(basename $(file))))))
+I18Npot   = $(PODIR)/$(PLUGIN).pot
+
+%.mo: %.po
+	msgfmt -c -o $@ $<
+
+$(I18Npot): $(wildcard *.c)
+	xgettext -C -cTRANSLATORS --no-wrap --no-location -k -ktr -ktrNOOP --msgid-bugs-address='<tobias.bratfisch@reel-multimedia.com>' -o $@ $^
+
+%.po:
+	msgmerge -U --no-wrap --no-location --backup=none -q $@ $<
+	@touch $@
 
+$(I18Nmsgs): $(LOCALEDIR)/%/LC_MESSAGES/vdr-$(PLUGIN).mo: $(PODIR)/%.mo
+	@mkdir -p $(dir $@)
+	cp $< $@
+
+
+### Targets:
+
+.PHONY: i18n
+i18n: $(I18Nmsgs) $(I18Npot)
+
+.PHONY: i18n-dist
+i18n-dist: $(I18Nmsgs)
+
+all: libvdr-$(PLUGIN).so i18n
+
+libvdr-$(PLUGIN).so: $(OBJS)
+	$(CXX) $(CXXFLAGS) -lbz2 -lz -shared $(OBJS) -o $@
+	@cp $@ $(LIBDIR)/$@.$(APIVERSION)
+
+dist: clean
+	@-rm -rf $(TMPDIR)/$(ARCHIVE)
+	@mkdir $(TMPDIR)/$(ARCHIVE)
+	@cp -a * $(TMPDIR)/$(ARCHIVE)
+	@tar czf $(PACKAGE).tgz -C $(TMPDIR) $(ARCHIVE)
+	@-rm -rf $(TMPDIR)/$(ARCHIVE)
+	@echo Distribution package created as $(PACKAGE).tgz
+
+clean:
+	@-rm -f $(PODIR)/*.mo $(PODIR)/*.pot
+	@-rm -f $(OBJS) $(DEPFILE) *.so *.tgz core* *~
 
diff -U 3 -H -d -r -N -- channelscan-0.6.1-orig/channellistbackupmenu.c channelscan-0.6.1/channellistbackupmenu.c
--- channelscan-0.6.1-orig/channellistbackupmenu.c	2010-03-23 13:52:11.000000000 +0300
+++ channelscan-0.6.1/channellistbackupmenu.c	2010-03-23 14:06:15.000000000 +0300
@@ -180,7 +180,7 @@
 
     snprintf(buffer, 512, "cp %s %s", CHANNELS_CONF, path);
     result = SystemExec(buffer);
-    
+
     free(path);
 
     if(result)
diff -U 3 -H -d -r -N -- channelscan-0.6.1-orig/channelscan.c channelscan-0.6.1/channelscan.c
--- channelscan-0.6.1-orig/channelscan.c	2010-03-23 13:52:11.000000000 +0300
+++ channelscan-0.6.1/channelscan.c	2010-03-23 13:52:11.000000000 +0300
@@ -147,7 +147,7 @@
     {
         channelDataPresent_ = false; 
         cRemote::Put(kRed); //start channelscan
-        return new cMenuChannelscan(channelData_.source, channelData_.frequency, channelData_.symbolrate, channelData_.polarization, true);
+        return new cMenuChannelscan(channelData_.source, channelData_.frequency, channelData_.symbolrate, channelData_.polarization);
     }
     else
     {
diff -U 3 -H -d -r -N -- channelscan-0.6.1-orig/csmenu.c channelscan-0.6.1/csmenu.c
--- channelscan-0.6.1-orig/csmenu.c	2010-03-23 13:52:11.000000000 +0300
+++ channelscan-0.6.1/csmenu.c	2010-03-23 13:52:11.000000000 +0300
@@ -39,8 +39,7 @@
 #include "csmenu.h"
 #include "filter.h"
 #include "channellistbackupmenu.h"
-#include "rotortools.h"
-#include "../netcvrotor/netcvrotorservice.h"
+//#include "rotortools.h"
 
 #include <bzlib.h>
 #include <zlib.h>
@@ -81,14 +80,13 @@
 cTransponders* cTransponders::instance_ = NULL;
 
 int pollCount;
-
 extern bool OnlyChannelList;
 int Ntv=0, Nradio=0;
 
 // --- Class cMenuChannelscan ------------------------------------------------
 
-cMenuChannelscan::cMenuChannelscan(int src, int freq, int symrate, char  pol, bool returnToNetcvrotor)
-:source(src), frequency(freq), symbolrate(symrate), polarization(pol), returnToNetcvrotor_(returnToNetcvrotor),
+cMenuChannelscan::cMenuChannelscan(int src, int freq, int symrate, char  pol)
+:source(src), frequency(freq), symbolrate(symrate), polarization(pol),
 cOsdMenu(tr("Channelscan"), CHNUMWIDTH)
 {
     data = Setup;
@@ -126,20 +124,29 @@
 
     fecTextsS2[0] = " - ";
     fecTextsS2[1] = "1/2";
-    fecTextsS2[2] = "1/3";      //S2
-    fecTextsS2[3] = "1/4";      //S2
-    fecTextsS2[4] = "2/3";
-    fecTextsS2[5] = "2/5";      //S2
-    fecTextsS2[6] = "3/4";
-    fecTextsS2[7] = "3/5";      //S2
-    fecTextsS2[8] = "4/5";
-    fecTextsS2[9] = "5/6";
-    fecTextsS2[10] = "6/7";
-    fecTextsS2[11] = "7/8";
-    fecTextsS2[12] = "8/9";
-    fecTextsS2[13] = "9/10";    //S2
+    fecTextsS2[2] = "2/3";
+    fecTextsS2[3] = "3/4";
+    fecTextsS2[4] = "3/5";      //S2
+    fecTextsS2[5] = "4/5";
+    fecTextsS2[6] = "5/6";
+    fecTextsS2[7] = "6/7";
+    fecTextsS2[8] = "7/8";
+    fecTextsS2[9] = "8/9";
+    fecTextsS2[10] = "9/10";    //S2
 
-    fecStatS2 = 0;
+    fecStatS2 = 3;
+    
+    rollTexts[0] = "ROLLOFF_35";
+    rollTexts[1] = "ROLLOFF_25";
+    rollTexts[2] = "ROLLOFF_20";
+    rollTexts[3] = "AUTO";
+    
+    rollStat = 0;
+    
+    nitTexts[1] = "Yes";
+    nitTexts[0]= "No";
+
+    nitStat = 1;    
 
     // Cable
     modTexts[0] = "Auto / 64QAM";
@@ -151,14 +158,14 @@
 
     // Sat S2
     modTextsS2[0] = "Auto";
-    modTextsS2[1] = "QPSK S2";
-    modTextsS2[2] = "PSK  8";
-    modTextsS2[3] = "VSB  8";
+    modTextsS2[1] = "QPSK";
+    modTextsS2[2] = "PSK 8";
+    modTextsS2[3] = "VSB 8";
     modTextsS2[4] = "VSB 16";
 
     modTextsS2[5] = tr("Detailed search");
 
-    modStat = 0;
+    modStat = 2;
 
     searchTexts[0] = tr("Manual");
     searchTexts[1] = tr("SearchMode$Auto");
@@ -167,7 +174,7 @@
     addNewChannelsToTexts[1] = tr("New channellist");
     addNewChannelsToTexts[2] = tr("Bouquets");
 
-    addNewChannelsTo = Setup.AddNewChannels == 1 ? 2 : 0;
+    addNewChannelsTo = 0;
 
     if(!source) {
         scanMode = 1;               // auto scan
@@ -236,16 +243,16 @@
                 txtstream << tr("DVB-C - Cable") << " (" << tr("Tuner") << ' ' << tuner + 1 << ')';
                 stp = CABLE;
             } else if (device->ProvidesSource(cSource::stSat)) {
-                if (device->ProvidesS2()) {
-                    if(TunerIsRotor(tuner))
-                       txtstream << tr("DVB-S2 - Rotor") << " (" << tr("Tuner") << ' ' << tuner + 1 << ')';
-                    else
+                if (device->NumProvidedSystems() == 2) { 
+//                    if(TunerIsRotor(tuner))
+//                       txtstream << tr("DVB-S2 - Rotor") << " (" << tr("Tuner") << ' ' << tuner + 1 << ')';
+//                    else
                        txtstream << tr("DVB-S2 - Satellite") << " (" << tr("Tuner") << ' ' << tuner + 1 << ')';
                     stp = SATS2;
                 } else {
-                    if(TunerIsRotor(tuner))
-                       txtstream << tr("DVB-S - Rotor") << " (" << tr("Tuner") << ' ' << tuner + 1 << ')';
-                    else
+//                    if(TunerIsRotor(tuner))
+//                       txtstream << tr("DVB-S - Rotor") << " (" << tr("Tuner") << ' ' << tuner + 1 << ')';
+//                    else
                        txtstream << tr("DVB-S - Satellite") << " (" << tr("Tuner") << ' ' << tuner + 1 << ')';
                     stp = SAT;
                 }
@@ -284,9 +291,9 @@
             else {
                 switch(info.type[i]) {
                     case FE_QPSK: // DVB-S
-                        stp = SAT;
+                        stp = SAT; 
                         break;
-                    case FE_DVBS2: // DVB-S2
+                    case SYS_DVBS2: // DVB-S2
                         stp = SATS2;
                         break;
                     case FE_OFDM: // DVB-T
@@ -305,7 +312,7 @@
                     srcTypes[srcTuners] = stp;
                     TunerNrArray[srcTuners] = i;
                     switch (info.type[i]) {
-                        case FE_DVBS2:
+                        case SYS_DVBS2:
                             srcTexts[srcTuners] = strdup(tr("Satellite-S2"));
                             break;
                         case FE_QPSK:
@@ -376,7 +383,7 @@
     }
 
     Add(new cMenuEditStraItem(tr("Search Mode"), &scanMode, 2, searchTexts));
-    Add(new cMenuEditStraItem(tr("Add new channels to"), &addNewChannelsTo, 3, addNewChannelsToTexts));
+//    Add(new cMenuEditStraItem(tr("Add new channels to"), &addNewChannelsTo, 3, addNewChannelsToTexts));
     AddBlankLineItem(1);
     if(srcTuners>0) // if no tune available : prevent CRASH
         Add( new cMenuEditStraItem( tr("Source"), &currentTuner, srcTuners, srcTexts ) );
@@ -422,7 +429,8 @@
             Add(new cMenuEditIntItem(tr("Symbolrate"), &symbolrate));
             Add(new cMenuEditStraItem(tr("Modulation"), &modStat, 6, modTextsS2));
             //if (modStat == 5)
-            Add(new cMenuEditStraItem("FEC", &fecStatS2, 14, fecTextsS2));      //  new var  S2  Fec
+            Add(new cMenuEditStraItem("FEC", &fecStatS2, 11, fecTextsS2));      //  new var  S2  Fec
+            Add(new cMenuEditStraItem("ROLLOFF", &rollStat, 4 , rollTexts));      //  new var  S2  RollOff
             break;
         case CABLE:
             Add(new cMenuEditIntItem(tr("Frequency (kHz)"), &frequency));
@@ -440,6 +448,9 @@
             break;
         }
     } else {
+      if(srScanMode == 1) {
+      Add(new cMenuEditStraItem("Nit Scan", &nitStat, 2 , nitTexts));
+      }
         if(srScanMode == 2)
             Add(new cMenuEditIntItem(tr("Symbolrate"), &symbolrate));
         AddBlankLineItem(1);
@@ -542,7 +553,7 @@
     int oldSRScanMode = srScanMode;
     bool oldExpertSettings = expertSettings;
 
-    bool removeFlag = false; // for removing channels after "New Channel (auto added)" bouquet
+//    bool removeFlag = false; // for removing channels after "New Channel (auto added)" bouquet
     std::vector<cChannel*> ChannelsToRemove;
 
     eOSState state = cOsdMenu::ProcessKey(Key);
@@ -573,7 +584,8 @@
         scp.card = TunerNrArray[currentTuner];        // tuner nr; VDR valid tuner number is in TunerNrArray.
         scp.type = sourceType;  // source type
         scp.source = source;
-        scp.bandwidth = bandwidth;
+        scp.frequency = frequency;
+	scp.bandwidth = bandwidth;
         scp.polarization = polarization;
         scp.symbolrate = symbolrate;
         scp.fec = (sourceType == SATS2) ? fecStatS2 : fecStat;
@@ -583,7 +595,8 @@
         scp.modulation = modStat;
         ///< on S2 value 5 means all mods
         scp.symbolrate_mode = srScanMode;
-
+	scp.rolloff = rollStat;
+        scp.nitscan = nitStat;
 #if 0
         DEBUG_CSMENU(" DEBUG LOAD TRANSPONDER(S)  ---- \n"
                      " Scanning on Tuner \t%d\n"
@@ -595,17 +608,21 @@
                      " Symbolrate \t%d \n"
                      " fec Stat  \t%d \n"
                      " detail search \t%d \n"
-                     " modulationStat  \t%d \n"
+		     " modulationStat  \t%d \n"
+                     " rolloffStat  \t%d \n"
                      " Symbolrate mode \t%d \n",
                      scp.card,
                      scp.type,
                      scp.source,
-             scp.frequency,
+                     scp.frequency,
                      scp.bandwidth,
                      scp.polarization,
                      scp.symbolrate,
                      scp.fec,
-                     scp.detail, scp.modulation, scp.symbolrate_mode);
+                     scp.detail,
+		     scp.modulation,
+		     scp.rolloff,
+		     scp.symbolrate_mode);
 #endif
 
         switch (Key)
@@ -624,7 +641,7 @@
 
             //addNewChannels
             //::Setup.AddNewChannels = (addNewChannelsTo!=0);
-            switch( addNewChannelsTo )
+/*            switch( addNewChannelsTo )
             {
                 case 0:
                     Setup.AddNewChannels = 0;
@@ -666,14 +683,14 @@
                     //add to own Bouquets
                     Setup.AddNewChannels = 1;
                     Setup.Save();
-                    break;
+                    break; 
                 default:
                 // should not be here
-                break;
+                break;  
             }
+*/
 
-
-            printf("\n\nAddNewChannelsTo: %d\n\n\n", addNewChannelsTo);
+            dsyslog("\n\nAddNewChannelsTo: %d\n\n\n", addNewChannelsTo);
 
             ScanSetup = data_; // when kRed is pressed, use the selected filters
             source = sourceType == CABLE ? 0x4000 : sourceType ==  TERR ? 0xC000 : source;
@@ -724,7 +741,7 @@
             }
             */
 
-            return AddSubMenu(new cMenuScanActive(&scp, returnToNetcvrotor_));
+            return AddSubMenu(new cMenuScanActive(&scp));
         case kGreen:
             if (sourceType == CABLE)
             {
@@ -830,8 +847,8 @@
 
 #define COLUMNWIDTH 24
 
-cMenuScanActive::cMenuScanActive(cScanParameters * sp, bool returnToNetcvrotor)
-:returnToNetcvrotor_(returnToNetcvrotor), cOsdMenu(tr("Scan active"), COLUMNWIDTH)
+cMenuScanActive::cMenuScanActive(cScanParameters * sp)
+:cOsdMenu(tr("Scan active"), COLUMNWIDTH)
 {
 
     Channels.IncBeingEdited();
@@ -984,9 +1001,7 @@
             Add(new cMenuInfoItem(tr("Added new channels"), (Channels.MaxNumber() - oldChannelNumbers)));
         }
         Add(new cMenuInfoItem(""));
-        if(returnToNetcvrotor_) {
-            Add(new cMenuInfoItem(tr("Press OK to go back to rotor settings")));
-        } else if (cPluginChannelscan::AutoScanStat == AssNone)
+         if (cPluginChannelscan::AutoScanStat == AssNone)
             Add(new cMenuInfoItem(tr("Press OK to finish or Exit for new scan")));
         ErrorMessage();
     }
@@ -1061,11 +1076,7 @@
                 cMenuChannelscan::scanState = ssInit;
                 printf(" cMenuChannelscan Call Channels.Save() \n");
                 Channels.Save();
-                if(returnToNetcvrotor_) {
-                    cRemote::CallPlugin("netcvrotor");
-                } else {
                     cRemote::Put(kChannels);
-                }
                 return osEnd;
             } else {
                 state = osContinue;
@@ -1100,6 +1111,8 @@
     }
 }
 
+bool scanning_on_receiving_device;
+
 cMenuScanActive::~cMenuScanActive()
 {
     Scan->ShutDown();
@@ -1201,7 +1214,7 @@
                 while(!found && source && (source->Code() & cSource::stSat)) {
                     for (cDiseqc *p = Diseqcs.First(); p && !found; p = Diseqcs.Next(p)) {
                        /* only look at sources configured for this tuner */
-                       if(source && (source->Code() != oldSrc->Code())&& (source->Code() == p->Source() || (TunerIsRotor(currentTuner) && IsWithinConfiguredBorders(currentTuner, source)))) {
+                       if(source && (source->Code() != oldSrc->Code())&& (source->Code() == p->Source())) {
                             *value = source->Code();
                             found = true;
                             break;
@@ -1223,7 +1236,7 @@
                while(!found && source && (source->Code() & cSource::stSat)) {
                    for (cDiseqc *p = Diseqcs.First(); p && !found; p = Diseqcs.Next(p)) {
                         /* only look at sources configured for this tuner */
-                        if(source && (source->Code() != oldSrc->Code()) && (source->Code() == p->Source() || (TunerIsRotor(currentTuner) && IsWithinConfiguredBorders(currentTuner, source)))) {
+                        if(source && (source->Code() != oldSrc->Code()) && (source->Code() == p->Source())) {
                             *value = source->Code();
                             found = true;
                             break;
diff -U 3 -H -d -r -N -- channelscan-0.6.1-orig/csmenu.h channelscan-0.6.1/csmenu.h
--- channelscan-0.6.1-orig/csmenu.h	2010-03-23 13:52:11.000000000 +0300
+++ channelscan-0.6.1/csmenu.h	2010-03-23 13:52:11.000000000 +0300
@@ -38,6 +38,7 @@
 #include <vdr/thread.h>
 #include <vdr/sources.h>
 #include <vdr/config.h>
+#include <vdr/dvbdevice.h>
 
 #include "scan.h"
 #include "transponders.h"
@@ -58,6 +59,7 @@
 #endif
 
 class cMyMenuEditSrcItem;
+extern bool scanning_on_receiving_device;
 
 // --- cMenuChannelscan  ----------------------------------------------------
 
@@ -81,9 +83,11 @@
     int srcTuners;
 
     const char * fecTexts[9];
-    const char * fecTextsS2[15];
+    const char * fecTextsS2[11];
     const char * modTexts[6];
     const char * modTextsS2[6];
+    const char * rollTexts[4];
+    const char * nitTexts[2];
     //const char * sRateItem[3];
     const char * searchTexts[2];
     const char * srScanTexts[3];
@@ -95,6 +99,8 @@
     int fecStat;
     int fecStatS2;
     int modStat;
+    int rollStat;
+    int nitStat;
     int scanMode;
     char polarization;
     int bandwidth;
@@ -119,7 +125,7 @@
     int lnbs;
     int currentChannel;
 
-    bool returnToNetcvrotor_;
+//    bool returnToNetcvrotor_;
 
     void Set();
     void InitLnbs();
@@ -130,7 +136,7 @@
 
     cMyMenuEditSrcItem *srcItem;
   public:
-    cMenuChannelscan(int source = 0, int freq = 12551, int symrate = 22000, char pol = 'V', bool returnToNetcvrotor = false);
+    cMenuChannelscan(int source = 0, int freq = 12073, int symrate = 27500, char pol = 'H');
     ~ cMenuChannelscan();
     virtual eOSState ProcessKey(eKeys Key);
     void SwitchChannel();
@@ -156,10 +162,10 @@
     int transponderNum_;
     std::auto_ptr < cScan > Scan;
     cScanParameters * scp;
-    bool returnToNetcvrotor_;
+//    bool returnToNetcvrotor_;
     void ErrorMessage();
   public:
-    cMenuScanActive(cScanParameters * sp, bool returnToNetcvrotor = false);
+    cMenuScanActive(cScanParameters * sp);
     ~ cMenuScanActive();
     eOSState ProcessKey(eKeys Key);
     void AddBlankLineItem(int lines);
diff -U 3 -H -d -r -N -- channelscan-0.6.1-orig/filter.c channelscan-0.6.1/filter.c
--- channelscan-0.6.1-orig/filter.c	2010-03-23 13:52:11.000000000 +0300
+++ channelscan-0.6.1/filter.c	2010-03-23 13:52:11.000000000 +0300
@@ -535,7 +535,8 @@
             // Scan the stream-specific loop:
             SI::PMT::Stream stream;
             int Vpid = 0;
-            int Ppid = pmt.getPCRPid();
+	    int Vtype = 0;
+            int Ppid = 0;
             int Apids[MAXAPIDS + 1] = { 0 };
             int Dpids[MAXDPIDS + 1] = { 0 };
 	    int Spids[MAXSPIDS + 1] = { 0 };
@@ -559,8 +560,11 @@
                 {
                 case 1:        // STREAMTYPE_11172_VIDEO
                 case 2:        // STREAMTYPE_13818_VIDEO
-                    Vpid = stream.getPid();
-                    break;
+                case 0x1B: // MPEG4
+		    Vpid = stream.getPid();
+		    Ppid = pmt.getPCRPid();
+                    Vtype = stream.getStreamType();
+		    break;
                 case 3:        // STREAMTYPE_11172_AUDIO
                 case 4:        // STREAMTYPE_13818_AUDIO
                     {
@@ -648,8 +652,8 @@
                     delete d;
                 }
             }
-#if APIVERSNUM >= 10509 || defined(REELVDR)
-            Channel->SetPids(Vpid, Vpid ? Ppid : 0, Apids, ALangs, Dpids,
+#if APIVERSNUM >= 10700 || defined(REELVDR)
+            Channel->SetPids(Vpid, Ppid, Vtype, Apids, ALangs, Dpids,
                              DLangs, Spids, SLangs, Tpid);
 #else
             Channel->SetPids(Vpid, Vpid ? Ppid : 0, Apids, ALangs, Dpids,
@@ -1210,16 +1214,13 @@
                      */
 
                     // same as in channels.c
-                    static int CodeRates[] = { FEC_NONE, FEC_1_2, FEC_2_3, FEC_3_4, FEC_4_5, FEC_5_6, FEC_6_7, FEC_7_8, FEC_8_9,        // DVB-S
-                        FEC_1_3, FEC_1_4, FEC_2_5, FEC_3_5, FEC_9_10,
-                            FEC_AUTO, FEC_AUTO, FEC_AUTO, FEC_AUTO, FEC_AUTO,
-                            FEC_NONE
+                    static int CodeRates[] = { FEC_NONE, FEC_1_2, FEC_2_3, FEC_3_4, FEC_5_6, FEC_7_8, FEC_8_9, FEC_3_5, FEC_4_5, FEC_9_10,
+		     FEC_AUTO, FEC_AUTO, FEC_AUTO, FEC_AUTO, FEC_AUTO, FEC_NONE
                     };          // DVB-S2
 
 
 
 
-
                     int CodeRate = CodeRates[sd->getFecInner()];
                     int SymbolRate = BCD2INT(sd->getSymbolRate()) / 10;
                     for (int n = 0; n < NumFrequencies; n++)
@@ -1232,12 +1233,14 @@
                                Frequencies[n], ts.getTransportStreamId(),
                                ts.getOriginalNetworkId());
 
-                        static int Rolloffs[] =
-                            { FE_ROLLOFF_35, FE_ROLLOFF_25, FE_ROLLOFF_20,
-            FE_ROLLOFF_35 };
-
+                        static int RollOffs[] =
+                            { ROLLOFF_35, ROLLOFF_25, ROLLOFF_20,
+            ROLLOFF_35 };
 
-                        int Modulation = QPSK;
+			static int Modulations[] = { QAM_AUTO, QPSK, PSK_8, QAM_16 };
+			int Modulation = Modulations[sd->getModulationType()];
+			int System = sd->getModulationSystem() ? SYS_DVBS2 : SYS_DVBS;
+//                        int Modulation = QPSK;
 
                         /*
                            static int Modulations[] = { QPSK, QPSK, QPSK, QPSK,      // DVB-S
@@ -1245,11 +1248,10 @@
                          */
 
                         static int ModulationsS2[] =
-                            { QPSK, QPSK_S2, PSK8, QPSK,
-                            QPSK, QPSK, QPSK, QPSK
+                            { QAM_AUTO, QPSK, PSK_8, QAM_16 
                         };      // DVB-S2
 
-                        int RollOff = Rolloffs[sd->getRollOff()];
+                        int RollOff = RollOffs[sd->getRollOff()]; 
 
                         if (sd->getModulationSystem() == 1)
                         {       // HD
@@ -1275,8 +1277,8 @@
                         cSatTransponder *t =
                             new cSatTransponder(Frequency, Polarization,
                                                 SymbolRate, Modulation,
-                                                CodeRate, RollOff,
-                                                sd->getModulationSystem());
+                                                CodeRate,System, 
+						 RollOff);
 
                         if (!t)
                         {
@@ -1291,9 +1293,9 @@
                                 insert(make_pair(Frequency, t));
                             if (ret.second)
                                 printf
-                                    (" New transponder f: %d  p: %c sr: %d (mod_si: %d  mod: %d, ro %d )    \n",
+                                    (" New transponder f: %d  p: %c sr: %d (mod_si: %d  mod: %d, sys %d ro %d )    \n",
                                      Frequency, Polarization, SymbolRate,
-                                     sd->getModulationType(), Modulation,
+                                     sd->getModulationType(), Modulation, System,
                                      RollOff);
                             else
                             {
diff -U 3 -H -d -r -N -- channelscan-0.6.1-orig/po/ru_RU.po channelscan-0.6.1/po/ru_RU.po
--- channelscan-0.6.1-orig/po/ru_RU.po	2010-03-23 13:52:12.000000000 +0300
+++ channelscan-0.6.1/po/ru_RU.po	2010-03-23 13:52:11.000000000 +0300
@@ -6,290 +6,290 @@
 msgid ""
 msgstr ""
 "Project-Id-Version: vdr-channelscan\n"
-"Report-Msgid-Bugs-To: <reelbox-devel@mailings.reelbox.org>\n"
-"POT-Creation-Date: 2009-09-29 14:57+0200\n"
-"PO-Revision-Date: 2008-09-29 10:24+0200\n"
-"Last-Translator: Vyacheslav Dikonov <sdiconov@mail.ru>\n"
-"Language-Team: <vdr@linuxtv.org>\n"
+"Report-Msgid-Bugs-To: Rolf Ahrenberg\n"
+"POT-Creation-Date: 2009-10-20 17:15+0400\n"
+"PO-Revision-Date: 2009-10-20 02:03+0400\n"
+"Last-Translator: ag1455 <a.g.prosat@tochka.ru>\n"
+"Language-Team: Russian <>\n"
 "MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=utf-8\n"
+"Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
 
 msgid "Channel lists"
-msgstr ""
+msgstr "Список каналов"
 
 msgid "Backup"
-msgstr ""
+msgstr "Резервировать"
 
 msgid "Backup channel list to..."
-msgstr ""
+msgstr "Резервиров. список в..."
 
 msgid "Restore channel list from..."
-msgstr ""
+msgstr "Восстановить список из..."
 
 msgid "Restore failed!"
-msgstr ""
+msgstr "Сбой рез. копии!"
 
 msgid "Channel List successfully loaded"
-msgstr ""
+msgstr "Список каналов загружен успешно"
 
 msgid "Invalid file"
-msgstr ""
+msgstr "Нечитаемый файл"
 
 msgid "Backup failed!"
-msgstr ""
+msgstr "Сбой рез. копирования!"
 
 msgid "Channel List successfully stored"
-msgstr ""
+msgstr "Сп. каналов сохранён успешно"
 
 msgid "TV only"
-msgstr ""
+msgstr "Только ТВ"
 
 msgid "Radio only"
-msgstr ""
+msgstr "Только Радио"
 
 msgid "HDTV only"
-msgstr ""
+msgstr "Только HD"
 
 msgid "Radio + TV"
-msgstr ""
+msgstr "Радио+ТВ"
 
 msgid "Servicetype"
-msgstr ""
+msgstr "Тип сервиса"
 
 msgid "Enable Logfile"
-msgstr ""
+msgstr "Лог в файл"
 
 msgid "Channelscan"
-msgstr ""
+msgstr "Сканер каналов"
 
 msgid "Detailed search"
-msgstr ""
+msgstr "Искать детально"
 
 msgid "Manual"
-msgstr ""
+msgstr "Ручной"
 
 msgid "SearchMode$Auto"
-msgstr ""
+msgstr "Автопоиск"
 
 msgid "End of channellist"
-msgstr ""
+msgstr "конец списка"
 
 msgid "New channellist"
-msgstr ""
+msgstr "новый список"
 
 msgid "Bouquets"
-msgstr ""
+msgstr "буклеты"
 
 msgid "Intelligent 6900/6875/6111"
-msgstr ""
+msgstr "Тонко с 6900/6875/6111"
 
 msgid "Try all 6900/6875/6111"
-msgstr ""
+msgstr "Искать все·6900/6875/6111"
 
 msgid "DVB-T - Terrestrial"
-msgstr ""
+msgstr "DVB-T-(эфирное)"
 
 msgid "Tuner"
-msgstr ""
+msgstr "Тюнер"
 
 msgid "DVB-C - Cable"
-msgstr ""
-
-msgid "DVB-S2 - Rotor"
-msgstr ""
+msgstr "DVB-С-(кабельное)"
 
 msgid "DVB-S2 - Satellite"
-msgstr ""
-
-msgid "DVB-S - Rotor"
-msgstr ""
+msgstr "DVB-S2-(спутник)"
 
 msgid "DVB-S - Satellite"
-msgstr ""
+msgstr "DVB-S-(спутник)"
 
 msgid "Satellite-S2"
-msgstr ""
+msgstr "Спутник-S2"
 
 msgid "Satellite-S"
-msgstr ""
+msgstr "Спутник-S"
 
 msgid "Terrestrial"
-msgstr ""
+msgstr "Эфирное"
 
 msgid "Cable"
-msgstr ""
+msgstr "Кабельное"
 
 msgid "Search Mode"
-msgstr ""
-
-msgid "Add new channels to"
-msgstr ""
+msgstr "Вид поиска"
 
 msgid "Source"
-msgstr ""
+msgstr "Источник"
 
 msgid "No Tuners available"
-msgstr ""
+msgstr "Тюнеры недоступны"
 
 msgid "Position"
-msgstr ""
+msgstr "Позиция"
 
 msgid "no"
-msgstr ""
+msgstr "нет"
 
 msgid "yes"
-msgstr ""
+msgstr "да"
 
 msgid "Bandwidth"
-msgstr ""
+msgstr "Шир. диапазон"
 
 msgid "Symbol Rates"
-msgstr ""
+msgstr "Симв. скорости"
 
 msgid "Frequency (MHz)"
-msgstr ""
+msgstr "Частота (МГц)"
 
 msgid "Polarization"
-msgstr ""
+msgstr "Поляризация"
 
 msgid "Symbolrate"
 msgstr "Симв.скорость"
 
 msgid "Modulation"
-msgstr ""
+msgstr "Модуляция"
 
 msgid "Frequency (kHz)"
-msgstr ""
+msgstr "Частота (КГц)"
 
 msgid "Recording is running !"
-msgstr ""
+msgstr "Запись начата !"
 
 msgid "Button$Start"
-msgstr ""
+msgstr "Старт поиска"
 
 msgid "Channel sel."
-msgstr ""
+msgstr "Выбор кан."
 
 msgid "DiSEqC"
-msgstr ""
+msgstr "DiSEqC"
 
 msgid "Scanning aborted"
-msgstr ""
+msgstr "Сканер остановлен"
 
 msgid "Scanning succed"
-msgstr ""
+msgstr "Скан. закончено"
 
 msgid "Retrieving transponders failed!"
-msgstr ""
+msgstr "Сбой получения транспондеров!"
 
 msgid "Please check satellites.conf."
-msgstr ""
+msgstr "Проверьте sources.conf"
 
 msgid "Tuner obtained no lock!"
-msgstr ""
+msgstr "На тюнере нет сигнала!"
 
 msgid "Please check your connections and satellites.conf."
-msgstr ""
+msgstr "Проверьте антенну и файл sources.conf"
 
 msgid "Unpredictable error occured!"
-msgstr ""
+msgstr "Непредсказуемая ошибка!"
 
 msgid "Please try again later"
-msgstr ""
+msgstr "Попробуйте позже"
 
 msgid "Information:"
-msgstr ""
+msgstr "Информация:"
 
 msgid "Entries in current channellist"
-msgstr ""
+msgstr "Содержимое данного списка"
 
 msgid "Recording is running"
-msgstr ""
+msgstr "Запись начата"
 
 msgid "Scan active"
-msgstr ""
+msgstr "Сканер активен"
 
 msgid "TV Channels\tRadio Channels"
-msgstr ""
+msgstr "ТВ КАНАЛЫ\tРАДИОКАНАЛЫ"
 
 #, c-format
 msgid "Retrieving transponder list from %s"
-msgstr ""
+msgstr "Получение списка трансп-ов от %s"
 
 #, c-format
 msgid "Scanning %s (%iMHz)\t%s"
-msgstr ""
+msgstr "Поиск %s (%iМГц)\t%s"
 
 #, c-format
 msgid "Scanning %s (%.3fMHz)\t%s"
-msgstr ""
+msgstr "Поиск %s (%.3fМГц)\t%s"
 
 msgid "No new channels found"
-msgstr ""
+msgstr "Новых каналов нет"
 
 msgid "Added new channels"
-msgstr ""
+msgstr "Добавлены каналы"
 
 msgid "Press OK to go back to rotor settings"
-msgstr ""
+msgstr "ОК - для возврата к устан. ротора"
 
 msgid "Press OK to finish or Exit for new scan"
-msgstr ""
+msgstr "OK - выход,    Exit - новый поиск"
 
 msgid "Scanning on transponder"
-msgstr ""
+msgstr "Ищу на транспондере"
 
 msgid "Auto"
-msgstr ""
+msgstr "Авто"
 
 msgid "enabled"
-msgstr ""
+msgstr "включён"
 
 msgid "disabled"
-msgstr ""
+msgstr "выключен"
 
 msgid "Back"
-msgstr ""
+msgstr "Назад"
 
 msgid "Skip"
-msgstr ""
+msgstr "Пропуск"
 
 msgid "Please select a channellist:"
-msgstr ""
+msgstr "Выберите список каналов:"
 
 msgid "Functions"
-msgstr ""
+msgstr "Функции"
 
 msgid "Loading channel list ..."
-msgstr ""
+msgstr "Загрузка списка..."
 
 msgid "Changes Done"
-msgstr ""
+msgstr "Изм. сохранены"
 
 msgid "Please check your Timers!"
-msgstr ""
+msgstr "Проверьте Ваш тюнер(ы)!"
 
 msgid "Changes failed"
-msgstr ""
+msgstr "Сбой изменений"
 
 msgid "Delete channel list?"
-msgstr ""
+msgstr "Удалить список?"
 
 msgid "Channel lists functions"
-msgstr ""
+msgstr "Функции списка каналов"
 
 msgid "Import current channellist"
-msgstr ""
+msgstr "Импорт этого списка"
 
 msgid "Export current channellist"
-msgstr ""
+msgstr "Экспорт этого списка"
 
 msgid "Import channels from ReelBox Avantgarde"
-msgstr ""
+msgstr "Импорт каналов из ReelBox Avantgarde"
+
+msgid "DVB-S2 - Rotor"
+msgstr "DVB-S2 - Ротор"
+
+msgid "DVB-S - Rotor"
+msgstr "DVB-S - Ротор"
+
+msgid "Add new channels to"
+msgstr "Добав. каналы в"
 
 msgid "Scanning channels on DVB-T/C/S and S2 Tuners"
-msgstr ""
+msgstr "Сканер каналов на DVB-T/C/S и S2 тюнерах"
 
 msgid "Channel Scan"
-msgstr ""
+msgstr "Сканирование каналов"
diff -U 3 -H -d -r -N -- channelscan-0.6.1-orig/rotortools.c channelscan-0.6.1/rotortools.c
--- channelscan-0.6.1-orig/rotortools.c	2010-03-23 13:52:11.000000000 +0300
+++ channelscan-0.6.1/rotortools.c	2010-03-23 13:52:11.000000000 +0300
@@ -46,7 +46,7 @@
 				    cmd4=(cmds>>8)&255;
 			    }
 		    }
-	    }
+	    } 
 }
 
 bool IsWithinConfiguredBorders(int currentTuner, const cSource *source){
@@ -137,7 +137,7 @@
 	    data[0]=(void*)(nrTuner);
 	    p->Service("netcvrotor.tunerIsRotor", &data);
 	    return (int)data[1];
-    }
+    } 
     return false;
 }
 
@@ -155,7 +155,7 @@
               *max = -1;
             }
 	    return true;
-    }
+    } 
     return false;
 }
 
diff -U 3 -H -d -r -N -- channelscan-0.6.1-orig/scan.c channelscan-0.6.1/scan.c
--- channelscan-0.6.1-orig/scan.c	2010-03-23 13:52:11.000000000 +0300
+++ channelscan-0.6.1/scan.c	2010-03-23 14:02:42.000000000 +0300
@@ -33,12 +33,12 @@
 
 #include <vdr/device.h>
 #include <vdr/sources.h>
+#include <vdr/dvbdevice.h>
 
 #include "channelscan.h"
 #include "csmenu.h"
 #include "scan.h"
 #include "debug.h"
-#include "rotortools.h"
 
 //#define SCAN_DELAY 25           // test tp 19.2E 12207/12522
 #define SCAN_DELAY 3        // test tp 19.2E 12207/12522
@@ -144,7 +144,9 @@
     scanParameter_ = *scp;
     if (scp->frequency == 1) {
       if (scp->type == SAT || scp->type == SATS2)   // we don`t differ between  S and S2 here
-            nitScan = true;
+        if (scp->nitscan == 1) {  nitScan = true;
+         } else { nitScan = false;
+             }
 #if 1
         if (scp->type == TERR)
             nitScan = true;
@@ -217,7 +219,7 @@
     CHECK(ioctl(fd_frontend, FE_READ_SIGNAL_STRENGTH, &value));
 #else
     if (device) {
-	    uint64_t v=0;
+            uint64_t v=0;
         device->GetAttribute("fe.signal",&v);
         value = v;
     }
@@ -232,7 +234,7 @@
     CHECK(ioctl(fd_frontend, FE_READ_SNR, &value));
 #else
     if (device) {
-	    uint64_t v=0;
+            uint64_t v=0;
         device->GetAttribute("fe.snr",&v);
         value = v;
     }
@@ -248,7 +250,7 @@
     CHECK(ioctl(fd_frontend, FE_READ_STATUS, &value));
 #else
     if (device) {
-	    uint64_t v=0;
+            uint64_t v=0;
         device->GetAttribute("fe.status",&v);
         value = (fe_status_t)v;
     }
@@ -369,7 +371,6 @@
     if (cMenuChannelscan::scanState == ssGetTransponders)
         transponderNr = 0;
 
-    WaitForRotorMovement(cardnr);
  
     //esyslog ("%s starting nitFilter loop",__FUNCTION__);
     while (!nitFilter_->EndOfScan() &&
@@ -379,11 +380,10 @@
     {
         //esyslog ("%s IN nitFilter loop",__FUNCTION__);
 
-        WaitForRotorMovement(cardnr);
 
         if (nitFilter_->Found()) {
             start = time(NULL);
-    	    esyslog("%s ",__FUNCTION__);
+            esyslog("%s ",__FUNCTION__);
         }
         // we don`t know how many tranponder we get
         if (cMenuChannelscan::scanState == ssGetTransponders) {
@@ -420,23 +420,25 @@
 
 void cScan::ScanDVB_S(cTransponder * tp, cChannel * c)
 {
-  //const time_t tt = time(NULL);
-  int maxmods = device->ProvidesS2()? 4 : 2;
+ //const time_t tt = time(NULL);
+  int maxmods = device->NumProvidedSystems() == 2? 4 : 2;
 
    // esyslog("%s cTransponder* tp = %x  cChannel *c = %x", __PRETTY_FUNCTION__);
     esyslog("maxmods = %d",maxmods);
 
-    if (maxmods == 3)
+    if (maxmods == 4)
         DEBUG_SCAN("\033[0;41m DEBUG [cs]: ScanDVB_S2 \033[0m\n");
         ;
 
     // skip HD Transonders on SD Tuner
-    if ( !device->ProvidesS2() && static_cast < cSatTransponder * >(tp)->System() == 1)
+    if ( !device->NumProvidedSystems() == 2 && static_cast < cSatTransponder * >(tp)->System() == 1)
         return;
 
   unsigned  int nRadio = radioChannelNames.size();
   unsigned  int nTv = tvChannelNames.size();
 
+  cDvbTransponderParameters dtp(c->Parameters());
+
     for (int mod = 0; mod < maxmods; mod++) {
         if (tp->Scanned())
             break;
@@ -444,9 +446,13 @@
         case 0:                //we do not overwrite given
             if (tp->Modulation() == 999) {
                 tp->SetModulation(QPSK);
+            static_cast < cSatTransponder * >(tp)->SetSystem(SYS_DVBS);		
+            static_cast < cSatTransponder * >(tp)->SetRollOff(ROLLOFF_35);
              //   static_cast < cSatTransponder * >(tp)->SetFEC(FEC_AUTO);
             } else if (tp->Modulation() == QPSK) {
              //   static_cast < cSatTransponder * >(tp)->SetFEC(FEC_AUTO);
+            static_cast < cSatTransponder * >(tp)->SetSystem(SYS_DVBS);
+            static_cast < cSatTransponder * >(tp)->SetRollOff(ROLLOFF_35);
             }
 
             DEBUG_SCAN(" DEBUG [DVB_S]; trying QPSK: freq: %d srate:%d   mod: %d  \n",
@@ -457,33 +463,34 @@
             break;
 
         case 2:
-            tp->SetModulation(PSK8);
+            tp->SetModulation(PSK_8);
             //static_cast < cSatTransponder * >(tp)->SetFEC(FEC_2_3);
-            static_cast < cSatTransponder * >(tp)->SetRollOff(FE_ROLLOFF_35);
-            DEBUG_SCAN (" DEBUG [DVB_S]; trying PSK8: freq: %d srate:%d   mod: %d  \n", tp->Frequency(), tp->Symbolrate(), tp->Modulation());
+            static_cast < cSatTransponder * >(tp)->SetRollOff(ROLLOFF_35);
+            static_cast < cSatTransponder * >(tp)->SetSystem(SYS_DVBS2);
+            DEBUG_SCAN (" DEBUG [DVB_S]; trying PSK8: freq: %d srate:%d   mod: %d  \n", tp->Frequency(), tp->Polarisation(), tp->Symbolrate(), tp->Modulation());
 
             break;
         case 3:
-            tp->SetModulation(QPSK_S2);
+            tp->SetModulation(QPSK);
             //static_cast < cSatTransponder * >(tp)->SetFEC(FEC_9_10);
-            static_cast < cSatTransponder * >(tp)->SetRollOff(FE_ROLLOFF_35);
+            static_cast < cSatTransponder * >(tp)->SetRollOff(ROLLOFF_35);
+            static_cast < cSatTransponder * >(tp)->SetSystem(SYS_DVBS2);	    
             DEBUG_SCAN (" DEBUG [DVB_S]; trying QPSK_S2: freq: %d srate:%d   mod: %d  \n", tp->Frequency(), tp->Symbolrate(), tp->Modulation());
             break;
         default:
-	    DEBUG_SCAN("No such modulation %d", mod);
+            DEBUG_SCAN("No such modulation %d", mod);
             break;
         }
         tp->SetTransponderData(c, sourceCode);
 
 
-        DEBUG_SCAN ("\033[0:44m DEBUG [DVB_S] - channel: freq: %d pol: %c  srate:%d   mod: %d  \033[0m\n", c->Frequency(), c->Polarization(), c->Srate(), c->Modulation());
+        DEBUG_SCAN ("\033[0:44m DEBUG [DVB_S] - channel: freq: %d pol: %c  srate:%d   mod: %d  \033[0m\n", c->Frequency(), dtp.Polarization(), dtp.Srate(), dtp.Modulation());
 
-    WaitForRotorMovement(cardnr);
 
         if (!device->SwitchChannel(c, false)) {
             esyslog(ERR "SwitchChannel(%d)  failed", c->Frequency());
             DEBUG_SCAN(ERR "SwitchChannel(%d)  failed\n", c->Frequency());
-#if HAVE_ROTOR
+/* #if HAVE_ROTOR
             esyslog(ERR "try Switch rotor ");
             DEBUG_SCAN(ERR " try Switch rotor \n");
 
@@ -504,24 +511,21 @@
                 DEBUG_printf("\nSleeping %s %d",__PRETTY_FUNCTION__,__LINE__);
                 usleep(100 * 1000); // inside loop, inside if // wait for rotor
             }
-#endif
+#endif */
 
-            WaitForRotorMovement(cardnr);
 
         } else {                  // switch succeeded
-            WaitForRotorMovement(cardnr);
 
             if (cDevice::GetDevice(cardnr)->HasLock(DVBS_LOCK_TIMEOUT)) {
-                WaitForRotorMovement(cardnr);
 
               //esyslog("...switchchannel else && HasLock()");
                 DEBUG_SCAN
                     ("\033[0;44m  debug  [scan] -- Got LOCK @ transponder %d  mod  %d fec %d  ---------- \033[0m\n",
-                     c->Transponder(), c->Modulation(), c->CoderateH());
+                     c->Transponder(), dtp.Modulation(), dtp.CoderateH());
 
                 dsyslog
                     ("[scan] -- Got LOCK @ transponder %d  mod  %d fec %d  ---------- \033[0m\n",
-                     c->Transponder(), c->Modulation(), c->CoderateH());
+                     c->Transponder(), dtp.Modulation(), dtp.CoderateH());
 
                 if (cMenuChannelscan::scanState == ssGetTransponders) {
                     esyslog("Starting ScanNitServices");
@@ -539,7 +543,7 @@
                 }
             } else {
                 DEBUG_SCAN ("\033[0;48m  debug  [scan] -- NO LOCK @ transponder %d  mod  %d fec %d ---------- \033[0m\n",
-                     c->Transponder(), c->Modulation(), c->CoderateH());
+                     c->Transponder(), dtp.Modulation(), dtp.CoderateH());
 
                 dsyslog (" debug  [channelscan] ------ NO LOCK after %ims @ transponder %d  -------------\n",
                      DVBS_LOCK_TIMEOUT, c->Transponder());
@@ -742,7 +746,7 @@
 void cScan::Action()
 {
     // the one and only "scanning = true" !
-            
+
     int i = 0;
     if (cPluginManager::GetPlugin("mcli")) {
         int sys = cardnr;
@@ -829,12 +833,12 @@
            // ScanDVB_S(t, c.get()); // why ScanDVB_S() when ScanNitServices() gets the tp list!?
           /* TB: feed a dummy channel into VDR so it doesn't turn the rotor back to it's old position */
 #ifdef REELVDR
-          cChannel dummyChan;
-          dummyChan.SetNumber(1);
-          dummyChan.SetSatTransponderData(scanParameter_.source, 9 /*scanParameter_.frequency*/, scanParameter_.polarization, scanParameter_.symbolrate, scanParameter_.bandwidth);
+//          cChannel dummyChan;
+//          dummyChan.SetNumber(1);
+//          dummyChan.SetSatTransponderData(scanParameter_.source, 9 /*scanParameter_.frequency*/, scanParameter_.polarization, scanParameter_.symbolrate, scanParameter_.bandwidth);
           //MoveRotor(cardnr, scanParameter_.source);
-          device->SetChannel(&dummyChan, false, false);
-          WaitForRotorMovement(cardnr);
+//          device->SetChannel(&dummyChan, false, false);
+//          WaitForRotorMovement(cardnr);
 #endif
           ScanNitServices();
 //             esyslog("%s !!!!!! FETCH tps END !!!!! ssGetChannels?=%d",__PRETTY_FUNCTION__,cMenuChannelscan::scanState == ssGetChannels);
@@ -850,7 +854,7 @@
             cMenuChannelscan::scanState = ssGetChannels;
             AddTransponders();
         } else {
-          
+
 #if EXTRA_FILTERS
           if(tmp_nfilter) {
             device->Detach(tmp_nfilter);
@@ -860,7 +864,7 @@
           if(tmp_pfilter) { device->Detach(tmp_pfilter); delete tmp_pfilter; }
           if(tmp_sfilter) { device->Detach(tmp_sfilter); delete tmp_sfilter; }
 #endif
-          
+
 #endif
             return;
         }
@@ -872,7 +876,6 @@
 
     while (Running() && cMenuChannelscan::scanState == ssGetChannels) {
 
-        WaitForRotorMovement(cardnr);
 
         DEBUG_SCAN ("\033[0;34m DEBUG [channelscan]: loop through  transponders ++++  size %d ++++++++\033[0m\n",
              (int)transponders.v_tp_.size());
@@ -880,7 +883,7 @@
         unsigned int oldTransponderMapSize = transponderMap.size();
         int i=1, ntv,nradio;
         time_t t_in,t_out;
-	    std::vector < cTransponder * > scannedTps;
+            std::vector < cTransponder * > scannedTps;
         while (tp != transponders.v_tp_.end()) {
             //if (!cMenuChannelscan::scanning) break;
             if (cMenuChannelscan::scanState != ssGetChannels)
@@ -902,26 +905,26 @@
 
               DEBUG_printf("\nCalled ScanDVB_S() \n");
               t_in = time(NULL);
-	      // loop over a previously scanned transponders
-	      bool alreadyScanned = false;
-	      FILE *fp = fopen ("/tmp/alreadyScanned.txt","a");
-	      for (constTpIter prevTp=scannedTps.begin(); prevTp!=scannedTps.end(); prevTp++)
+              // loop over a previously scanned transponders
+              bool alreadyScanned = false;
+              FILE *fp = fopen ("/tmp/alreadyScanned.txt","a");
+              for (constTpIter prevTp=scannedTps.begin(); prevTp!=scannedTps.end(); prevTp++)
                       /* TB: checking equality of frequencies is not enough! */
                       /*     Polarization has also to be checked... */
                       /*     Modulation and FEC also ... */
-		      if((dynamic_cast < cSatTransponder * >(*prevTp))->FEC() == (dynamic_cast < cSatTransponder * >(*tp))->FEC() && (dynamic_cast < cSatTransponder * >(*prevTp))->Modulation() == (dynamic_cast < cSatTransponder * >(*tp))->Modulation() &&  (dynamic_cast < cSatTransponder * >(*prevTp))->Polarization() == (dynamic_cast < cSatTransponder * >(*tp))->Polarization() && /*(*tp)->SourceCode() ==  (*prevTp)->SourceCode() && */  abs((*prevTp)->Frequency() - frequency) <= 1  ) // from the same SAT source ?
-		      {
-		      alreadyScanned = true;
-		      printf("\t(%s:%d) %d Mhz already scanned\n", __FILE__,__LINE__, frequency);
-		      fprintf(fp,"(%s:%d) %d Mhz already scanned\n", __FILE__,__LINE__, frequency);
-		      break;
-		      }
-	      fclose(fp);
+                      if((dynamic_cast < cSatTransponder * >(*prevTp))->FEC() == (dynamic_cast < cSatTransponder * >(*tp))->FEC() && (dynamic_cast < cSatTransponder * >(*prevTp))->Modulation() == (dynamic_cast < cSatTransponder * >(*tp))->Modulation() &&  (dynamic_cast < cSatTransponder * >(*prevTp))->Polarization() == (dynamic_cast < cSatTransponder * >(*tp))->Polarization() && /*(*tp)->SourceCode() ==  (*prevTp)->SourceCode() && */  abs((*prevTp)->Frequency() - frequency) <= 1  ) // from the same SAT source ?
+                      {
+                      alreadyScanned = true;
+                      printf("\t(%s:%d) %d Mhz already scanned\n", __FILE__,__LINE__, frequency);
+                      fprintf(fp,"(%s:%d) %d Mhz already scanned\n", __FILE__,__LINE__, frequency);
+                      break;
+                      }
+              fclose(fp);
 
-	      if( alreadyScanned == false ) {
-		      ScanDVB_S(*tp, c.get());
-		      scannedTps.push_back(*tp);
-	      }
+              if( alreadyScanned == false ) {
+                      ScanDVB_S(*tp, c.get());
+                      scannedTps.push_back(*tp);
+              }
 
               t_out = time(NULL);
               fp = fopen("/tmp/cScan.log","a");
diff -U 3 -H -d -r -N -- channelscan-0.6.1-orig/transponders.c channelscan-0.6.1/transponders.c
--- channelscan-0.6.1-orig/transponders.c	2010-03-23 13:52:11.000000000 +0300
+++ channelscan-0.6.1/transponders.c	2010-03-23 14:05:35.000000000 +0300
@@ -120,9 +120,6 @@
       case 78:  return FEC_7_8;
       case 89:  return FEC_8_9;
       /// S2 FECs : list taken from linux/frontend.h
-      case 14:  return FEC_1_4;
-      case 13:  return FEC_1_3;
-      case 25:  return FEC_2_5;
       case 35:  return FEC_3_5;
       case 910: return FEC_9_10;
       default:  return FEC_AUTO;
@@ -136,10 +133,10 @@
     int stat2fecs2[] = {
         FEC_AUTO,
         FEC_1_2,
-        FEC_1_3, //S2
-        FEC_1_4, //S2
+//        FEC_1_3, //S2
+//        FEC_1_4, //S2
         FEC_2_3,
-        FEC_2_5, //S2
+//        FEC_2_5, //S2
         FEC_3_4,
         FEC_3_5, //S2
         FEC_4_5,
@@ -160,15 +157,27 @@
     switch (mod)
     {
       case 0: return 0;               // auto  (SD only)
-      case 1: return QPSK_S2;
-      case 2: return PSK8;
+      case 1: return QPSK;
+      case 2: return PSK_8;
       case 3: return VSB_8;
       case 4: return VSB_16;
       case 5: return 999;             // try all
     }
-    return PSK8;
+    return PSK_8;
+}
+
+int cTransponders::StatToRoll(int rolloff)
+{
+    int stat2roll[] = {
+    ROLLOFF_35,
+    ROLLOFF_25,
+    ROLLOFF_20,
+    ROLLOFF_AUTO,
+    };
+    return stat2roll[rolloff];
 }
 
+
 //----------- Class cSatTransponder -------------------------------
 
 cSatTransponder::cSatTransponder():cTransponder(0), pol_(' '), fec_(9)
@@ -176,23 +185,34 @@
     modulation_ = 0;
 }
 
-cSatTransponder::cSatTransponder(int Frequency, char Pol, int SymbolRate, int Modulation, int FEC, int RollOff, int ModSystem):cTransponder(Frequency), pol_(Pol), fec_(FEC), rolloff_ (RollOff)
+cSatTransponder::cSatTransponder(int Frequency, char Pol, int SymbolRate, int FEC, int Modulation, int System, int RollOff):cTransponder(Frequency), pol_(Pol), symbolrate_(SymbolRate), fec_(FEC) 
 {
     channelNum_ = 0;
     modulation_ = Modulation;
     symbolrate_ = SymbolRate;
-
+    system_ = System; 
+    rolloff_ = RollOff; 
+    
     DEBUG_TRANSPONDER(DBGT
-                      " new cSatTransponder(f: %d,p: %c,sRate: %d  mod:%d ,fec %d\n",
-                      frequency_, pol_, symbolrate_, modulation_, fec_);
+                      " new cSatTransponder(f: %d,p: %c,sRate: %d,fec %d,  mod:%d \n",
+                      frequency_, pol_, symbolrate_, fec_, modulation_);
 }
 
 bool cSatTransponder::SetTransponderData(cChannel * c, int Code)
 {
+ cDvbTransponderParameters dtp(c->Parameters());
+ dtp.SetCoderateH(fec_);
+ dtp.SetModulation(modulation_);
+ dtp.SetSystem(system_);
+ dtp.SetRollOff(rolloff_);
+ dtp.SetPolarization(pol_);
+
     DEBUG_TRANSPONDER(DBGT
-                      " SetSatTransponderData(source:%d,f:%6d,p:%c,sRate:%d,mod%3d,fec%d \n",
-                      Code, frequency_, pol_, symbolrate_, modulation_, fec_);
-    return c->SetSatTransponderData(Code, frequency_, pol_, symbolrate_, fec_, modulation_, rolloff_);
+                      " SetSatTransponderData(source:%d,f:%6d,p:%c,sRate:%d,fec%d,mod%3d,sys%d,roll%d \n",
+                      Code, frequency_, pol_, symbolrate_, fec_, modulation_, system_, rolloff_);             
+//    return c->SetSatTransponderData(Code, frequency_, pol_, symbolrate_, fec_, modulation_, system_, rolloff_);
+return c->SetTransponderData(Code, frequency_, symbolrate_, dtp.ToString('S'), true);
+
 }
 
 
@@ -289,8 +309,16 @@
     else
         bandwidth_ = BANDWIDTH_8_MHZ;
 
-    return c->SetTerrTransponderData(type, frequency_, bandwidth_, modulation_, hierarchy_, fec_h_, fec_l_, guard_, transmission_);     //
+  cDvbTransponderParameters dtp(c->Parameters());
+  dtp.SetBandwidth(bandwidth_);
+  dtp.SetCoderateH(fec_h_);
+  dtp.SetCoderateL(fec_l_);
+  dtp.SetModulation(modulation_);
+  dtp.SetHierarchy(hierarchy_);
+  dtp.SetGuard(guard_);
+  dtp.SetTransmission(transmission_);
 
+  return c->SetTransponderData(type, frequency_, symbolrate_, dtp.ToString('T'), true);
 }
 
 //----------- Class cCableTransponder -------------------------------
@@ -327,8 +355,12 @@
 {
     int type = cSource::stCable;
 
+    cDvbTransponderParameters dtp(c->Parameters());
+    dtp.SetCoderateH(fec_h_);
+    dtp.SetModulation(modulation_);
+
     DEBUG_TRANSPONDER(DBGT " SetCableTransponderData(f:%d, m :%d ,sRate: %d, fec %d", frequency_, modulation_, symbolrate_, fec_h_);
-    return c->SetCableTransponderData(type, frequency_, modulation_, symbolrate_, fec_h_);
+    return c->SetTransponderData(type, frequency_, symbolrate_, dtp.ToString('C'), true);
 }
 
 //----------- Class Transponders -------------------------------
@@ -362,25 +394,36 @@
             {
                 scp->modulation = StatToS2Mod(scp->modulation);
                 scp->fec = StatToS2Fec(scp->fec);
-                // TODO explain
+              if (scp->modulation == 9) {
+                scp->system = 6;
+                scp->rolloff = StatToRoll(scp->rolloff);
+                }
+            else {
+                scp->system = 5;
+                scp->rolloff = 0;
+                }
             }
+            else {
+                scp->system = 5;  
+                scp->rolloff = 0; 
+                 }
 
             DEBUG_TRANSPONDER(DBGT
-                              " Load single SatTransponderData(f:\"%d\", pol[%c] -- symbolRate  %d,  modulation %d  fec %d",
+                              " Load single SatTransponderData(f:\"%d\", pol[%c] -- symbolRate  %d, fec %d, modulation %d, system %d, roll %d",
                               scp->frequency, scp->polarization,
-                              scp->symbolrate, scp->modulation, scp->fec);
+                              scp->symbolrate,  scp->fec, scp->modulation, scp->system, scp->rolloff);
             cSatTransponder *t =
                 new cSatTransponder(scp->frequency, scp->polarization,
-                                    scp->symbolrate, scp->modulation,
-                                    scp->fec);
-            printf("%s:%i new cSatTransponder created with fec %i\n", __FILE__, __LINE__, scp->fec);
+                                    scp->symbolrate, scp->fec, scp->modulation); // , scp->system, scp->rolloff );
+            printf("%s:%i new cSatTransponder created with freq %i pol %c srate %i fec %i mod %i sys %i roll%i\n", __FILE__, __LINE__, scp->frequency,
+             scp->polarization, scp->symbolrate, scp->fec, scp->modulation, scp->system, scp->rolloff );
 
             fileName_ = TplFileName(sourceCode_);
             position_ = SetPosition(fileName_); // need this to display Satellite info
-	    fileName_.clear(); // donot load transponder list during manual scan
-	    // what about description_ ? //TODO
-            
-	    v_tp_.push_back(t);
+            fileName_.clear(); // donot load transponder list during manual scan
+            // what about description_ ? //TODO
+
+            v_tp_.push_back(t);
         }
 
     } else if (scp->type == TERR) {
@@ -420,7 +463,7 @@
     sourceCode_ = Source;
 
     if (cSource::IsSat(sourceCode_)) {
-        cSatTransponder *t = new cSatTransponder(scp.frequency, scp.polarization, scp.symbolrate, scp.modulation, scp.fec);
+        cSatTransponder *t = new cSatTransponder(scp.frequency, scp.polarization, scp.symbolrate, scp.fec, scp.modulation); 
         v_tp_.push_back(t);
     }
 
diff -U 3 -H -d -r -N -- channelscan-0.6.1-orig/transponders.h channelscan-0.6.1/transponders.h
--- channelscan-0.6.1-orig/transponders.h	2010-03-23 13:52:11.000000000 +0300
+++ channelscan-0.6.1/transponders.h	2010-03-23 13:52:11.000000000 +0300
@@ -68,6 +68,9 @@
     int bandwidth;
     int polarization;
     int fec;
+    int system;
+    int rolloff;
+    int nitscan;
     int detail;                 // DVB-T: Scan +-166kHz offsets
     int modulation;             // DVB-C: auto, ...
     int symbolrate_mode;        // DVB-C: 0/1/2 intelligent/dumb/fixed symbolrate
@@ -182,21 +185,25 @@
 {                               /* final */
   private:
     char pol_;
+    int symbolrate_;
     int fec_;
     int rolloff_;
     int system_;
     //cSatTransponder(const cSatTransponder& obj); //?? what about cpy ctor
   public:
       cSatTransponder();        //?? what about cpy ctor
-      cSatTransponder(int Frequency, char Pol, int SymbolRate, int Modulation,
-                      int FEC, int Rolloff = 0, int ModSystem = 0);
+      cSatTransponder(int Frequency, char Pol, int SymbolRate, int FEC, int Modulation,
+                       int System = 0, int Rolloff = 0);
     bool SetTransponderData(cChannel * c, int Code = 0);
     ///<  set transponder Data to channel
     int RollOff() const;
     int FEC() const;
+    int SymbolRate() const;
     void SetRollOff(int rolloff);
     void SetFEC(int fec);
+    void SetSymbolRate(int symbolrate);
     int System() const;
+    void SetSystem(int system);
     char Polarization() { return pol_; };
     bool Parse(const std::string & line);
     /* over write */ void PrintData();
@@ -217,6 +224,18 @@
 }
 
 inline int
+cSatTransponder::SymbolRate() const
+{
+    return symbolrate_;
+}
+
+inline void
+cSatTransponder::SetSymbolRate(int symbolrate) 
+{
+    symbolrate_ = symbolrate;
+}
+
+inline int
 cSatTransponder::FEC() const
 {
     return fec_;
@@ -235,6 +254,12 @@
 }
 
 inline void
+cSatTransponder::SetSystem(int system)
+{
+    system_ = system;
+}
+
+inline void
 cSatTransponder::PrintData()
 {
     printf("%d,%c,%d,%d\n", frequency_, pol_, symbolrate_, fec_);
@@ -326,6 +351,7 @@
     static int StatToS2Mod(int val);
     ///< returns transformed S2 modulation values
     int StatToS2Fec(int mod);
+    int StatToRoll(int rolloff);
 
     int SourceCode() const
     {
