diff --git a/CEP/Calibration/BBSControl/src/Step.cc b/CEP/Calibration/BBSControl/src/Step.cc
index 22077c95382a67c7c30d639668158df37f0c857c..d5f2716a1f97194c4c3b774e136276ce69cbd44e 100644
--- a/CEP/Calibration/BBSControl/src/Step.cc
+++ b/CEP/Calibration/BBSControl/src/Step.cc
@@ -254,8 +254,20 @@ namespace LOFAR
         itsModelConfig.clearGainConfig();
       }
 
-      itsModelConfig.setTEC(ps.getBool(prefix+"Model.TEC.Enable",
-        itsModelConfig.useTEC()));
+      if (ps.getBool(prefix+"Model.TEC.Enable", itsModelConfig.useTEC())) {
+        TECConfig parentConfig = itsModelConfig.getTECConfig();
+
+        bool splitTEC = false;
+        if(itsModelConfig.useTEC()) {
+          splitTEC = ps.getBool(prefix+"Model.TEC.Split",
+              parentConfig.splitTEC());
+        } else {
+          splitTEC = ps.getBool(prefix+"Model.TEC.Split", false);
+        }
+        itsModelConfig.setTECConfig(TECConfig(splitTEC));
+      } else {
+        itsModelConfig.clearTECConfig();
+      }
 
       itsModelConfig.setCommonRotation(ps.getBool(prefix+"Model.CommonRotation.Enable",
         itsModelConfig.useCommonRotation()));
diff --git a/CEP/Calibration/BBSKernel/include/BBSKernel/MeasurementExprLOFARUtil.h b/CEP/Calibration/BBSKernel/include/BBSKernel/MeasurementExprLOFARUtil.h
index ba5e9466c948931f2016dc0179b7535fad283f45..45b8cd2ed948f8aed955e104cd91ee30c4563ea2 100644
--- a/CEP/Calibration/BBSKernel/include/BBSKernel/MeasurementExprLOFARUtil.h
+++ b/CEP/Calibration/BBSKernel/include/BBSKernel/MeasurementExprLOFARUtil.h
@@ -86,7 +86,8 @@ makeGainExpr(Scope &scope,
 
 Expr<JonesMatrix>::Ptr
 makeTECExpr(Scope &scope,
-    const Station::ConstPtr &station);
+    const Station::ConstPtr &station,
+    const TECConfig &config);
 
 Expr<JonesMatrix>::Ptr
 makeCommonRotationExpr(Scope &scope,
diff --git a/CEP/Calibration/BBSKernel/include/BBSKernel/ModelConfig.h b/CEP/Calibration/BBSKernel/include/BBSKernel/ModelConfig.h
index 3664d74c6c6787a4e337a97ca057cba37da7fb44..9fefedc7b74e96916c608bf05bf4a79dabba5e0d 100644
--- a/CEP/Calibration/BBSKernel/include/BBSKernel/ModelConfig.h
+++ b/CEP/Calibration/BBSKernel/include/BBSKernel/ModelConfig.h
@@ -52,6 +52,19 @@ private:
     bool itsSplitClock;
 };
 
+// Configuration options specific to TEC.
+class TECConfig
+{
+public:
+    TECConfig();
+    TECConfig(bool splitTEC);
+
+    bool splitTEC() const;
+
+private:
+    bool itsSplitTEC;
+};
+
 // Configuration options specific to the direction independent gain model.
 class GainConfig
 {
@@ -175,7 +188,9 @@ public:
     void clearGainConfig();
 
     bool useTEC() const;
-    void setTEC(bool value = true);
+    void setTECConfig(const TECConfig &config);
+    const TECConfig &getTECConfig() const;
+    void clearTECConfig();
 
     bool useCommonRotation() const;
     void setCommonRotation(bool value = true);
@@ -251,6 +266,7 @@ private:
     bool                    itsModelOptions[N_ModelOptions];
 
     ClockConfig             itsConfigClock;
+    TECConfig               itsConfigTEC;
     GainConfig              itsConfigGain;
     DirectionalGainConfig   itsConfigDirectionalGain;
     ElevationCutConfig      itsConfigElevationCut;
diff --git a/CEP/Calibration/BBSKernel/src/MeasurementExprLOFAR.cc b/CEP/Calibration/BBSKernel/src/MeasurementExprLOFAR.cc
index 503a01924da334a308fc50f33e0b5d33a11d0b9e..489acad11c92af6e3358d3120814b3f915deb483 100644
--- a/CEP/Calibration/BBSKernel/src/MeasurementExprLOFAR.cc
+++ b/CEP/Calibration/BBSKernel/src/MeasurementExprLOFAR.cc
@@ -319,7 +319,8 @@ void MeasurementExprLOFAR::makeForwardExpr(SourceDB &sourceDB,
         if(config.useTEC())
         {
             exprDIE[i] = compose(exprDIE[i],
-                makeTECExpr(itsScope, instrument->station(i)));
+                makeTECExpr(itsScope, instrument->station(i),
+                            config.getTECConfig()));
         }
 
         // Direction independent polarization rotation.
@@ -439,7 +440,8 @@ void MeasurementExprLOFAR::makeInverseExpr(SourceDB &sourceDB,
         if(config.useTEC())
         {
             stationExpr[i] = compose(stationExpr[i],
-                makeTECExpr(itsScope, instrument->station(i)));
+                makeTECExpr(itsScope, instrument->station(i),
+                            config.getTECConfig()));
         }
 
         // Direction independent polarization rotation.
diff --git a/CEP/Calibration/BBSKernel/src/MeasurementExprLOFARUtil.cc b/CEP/Calibration/BBSKernel/src/MeasurementExprLOFARUtil.cc
index 992a9c52d237989b23ab98ba5cbe758743f4c6cf..9f08c6a77a61825e8dfb6f3006231a01ab1839bf 100644
--- a/CEP/Calibration/BBSKernel/src/MeasurementExprLOFARUtil.cc
+++ b/CEP/Calibration/BBSKernel/src/MeasurementExprLOFARUtil.cc
@@ -179,12 +179,22 @@ makeGainExpr(Scope &scope,
 
 Expr<JonesMatrix>::Ptr
 makeTECExpr(Scope &scope,
-    const Station::ConstPtr &station)
+    const Station::ConstPtr &station,
+    const TECConfig &config)
 {
-    ExprParm::Ptr tec = scope(INSTRUMENT, "TEC:" + station->name());
+    if (config.splitTEC()) {
+      ExprParm::Ptr tec0 = scope(INSTRUMENT, "TEC:0:" + station->name());
+      ExprParm::Ptr tec1 = scope(INSTRUMENT, "TEC:1:" + station->name());
 
-    Expr<Scalar>::Ptr shift = Expr<Scalar>::Ptr(new TECU2Phase(tec));
-    return Expr<JonesMatrix>::Ptr(new AsDiagonalMatrix(shift, shift));
+      Expr<Scalar>::Ptr shift0 = Expr<Scalar>::Ptr(new TECU2Phase(tec0));
+      Expr<Scalar>::Ptr shift1 = Expr<Scalar>::Ptr(new TECU2Phase(tec1));
+
+      return Expr<JonesMatrix>::Ptr(new AsDiagonalMatrix(shift0, shift1));
+    } else {
+        ExprParm::Ptr tec = scope(INSTRUMENT, "TEC:" + station->name());
+        Expr<Scalar>::Ptr shift = Expr<Scalar>::Ptr(new TECU2Phase(tec));
+        return Expr<JonesMatrix>::Ptr(new AsDiagonalMatrix(shift, shift));
+    }
 }
 
 Expr<JonesMatrix>::Ptr
diff --git a/CEP/Calibration/BBSKernel/src/ModelConfig.cc b/CEP/Calibration/BBSKernel/src/ModelConfig.cc
index 0f5bebd17325347328d961befa5314d3dc435252..ae79ed3c18f00b2c01089e26f9f18af457247fe9 100644
--- a/CEP/Calibration/BBSKernel/src/ModelConfig.cc
+++ b/CEP/Calibration/BBSKernel/src/ModelConfig.cc
@@ -50,6 +50,24 @@ bool ClockConfig::splitClock() const
   return itsSplitClock;
 }
 
+// -------------------------------------------------------------------------- //
+// - TECConfig implementation                                               - //
+// -------------------------------------------------------------------------- //
+TECConfig::TECConfig()
+    : itsSplitTEC(false)
+{
+}
+
+TECConfig::TECConfig(bool splitTEC)
+    :   itsSplitTEC(splitTEC)
+{
+}
+
+bool TECConfig::splitTEC() const
+{
+  return itsSplitTEC;
+}
+
 // -------------------------------------------------------------------------- //
 // - GainConfig implementation                                               - //
 // -------------------------------------------------------------------------- //
@@ -132,13 +150,15 @@ const string &BeamConfig::asString(Mode in)
 }
 
 BeamConfig::BeamConfig()
-    :   itsMode(DEFAULT),
+    :   notdef(0),
+        itsMode(DEFAULT),
         itsUseChannelFreq(false)
 {
 }
 
 BeamConfig::BeamConfig(Mode mode, bool useChannelFreq)
-    :   itsMode(mode),
+    :   notdef(0),
+        itsMode(mode),
         itsUseChannelFreq(useChannelFreq)
 {
 }
@@ -190,13 +210,15 @@ const string &IonosphereConfig::asString(ModelType in)
 }
 
 IonosphereConfig::IonosphereConfig()
-    :   itsModelType(N_ModelType),
+    :   notdef(0),
+        itsModelType(N_ModelType),
         itsDegree(0)
 {
 }
 
 IonosphereConfig::IonosphereConfig(ModelType type, unsigned int degree = 0)
-    :   itsModelType(type),
+    :   notdef(0),
+        itsModelType(type),
         itsDegree(degree)
 {
 }
@@ -267,6 +289,11 @@ bool ModelConfig::useTEC() const
     return itsModelOptions[TEC];
 }
 
+const TECConfig &ModelConfig::getTECConfig() const
+{
+    return itsConfigTEC;
+}
+
 bool ModelConfig::useCommonRotation() const
 {
     return itsModelOptions[COMMON_ROTATION];
@@ -369,6 +396,18 @@ void ModelConfig::clearClockConfig()
     itsModelOptions[CLOCK] = false;
 }
 
+void ModelConfig::setTECConfig(const TECConfig &config)
+{
+    itsModelOptions[TEC] = true;
+    itsConfigTEC= config;
+}
+
+void ModelConfig::clearTECConfig()
+{
+    itsConfigTEC= TECConfig();
+    itsModelOptions[TEC] = false;
+}
+
 void ModelConfig::setGainConfig(const GainConfig &config)
 {
     itsModelOptions[GAIN] = true;
@@ -381,11 +420,6 @@ void ModelConfig::clearGainConfig()
     itsConfigGain = GainConfig();
 }
 
-void ModelConfig::setTEC(bool value)
-{
-    itsModelOptions[TEC] = value;
-}
-
 void ModelConfig::setCommonRotation(bool value)
 {
     itsModelOptions[COMMON_ROTATION] = value;
@@ -501,6 +535,13 @@ ostream &operator<<(ostream &out, const ClockConfig &obj)
     return out;
 }
 
+ostream &operator<<(ostream &out, const TECConfig &obj)
+{
+    out << indent << "Split TEC: " << boolalpha << obj.splitTEC()
+        << noboolalpha;
+    return out;
+}
+
 ostream &operator<<(ostream &out, const GainConfig &obj)
 {
     out << indent << "Phasors: " << boolalpha << obj.phasors() << noboolalpha;
@@ -570,6 +611,10 @@ ostream& operator<<(ostream &out, const ModelConfig &obj)
 
     out << endl << indent << "TEC enabled: " << boolalpha
         << obj.useTEC() << noboolalpha;
+    if (obj.useTEC()) {
+      Indent id;
+      out << endl << obj.getTECConfig();
+    }
     out << endl << indent << "Common rotation enabled: " << boolalpha
         << obj.useCommonRotation() << noboolalpha;
     out << endl << indent << "Common scalar phase enabled: " << boolalpha
diff --git a/CEP/Calibration/BBSKernel/src/StationExprLOFAR.cc b/CEP/Calibration/BBSKernel/src/StationExprLOFAR.cc
index 6108c66b35398fbcb309ccf6ae02de372014e9bd..70cc0a141c8270db29e849f4f79f7331cd851644 100644
--- a/CEP/Calibration/BBSKernel/src/StationExprLOFAR.cc
+++ b/CEP/Calibration/BBSKernel/src/StationExprLOFAR.cc
@@ -97,7 +97,8 @@ void StationExprLOFAR::initialize(SourceDB &sourceDB, const BufferMap &buffers,
         if(config.useTEC())
         {
             itsExpr[i] = compose(itsExpr[i],
-                makeTECExpr(itsScope, instrument->station(i)));
+                makeTECExpr(itsScope, instrument->station(i),
+                            config.getTECConfig()));
         }
 
         // Direction independent polarization rotation.
diff --git a/CEP/DP3/DPPP/src/ApplyCal.cc b/CEP/DP3/DPPP/src/ApplyCal.cc
index 5ce4b9e6e3dccef537e2f325fc0f26724dd86ea9..24c2a593298d7d37c87a3052b374e9a001148e9c 100644
--- a/CEP/DP3/DPPP/src/ApplyCal.cc
+++ b/CEP/DP3/DPPP/src/ApplyCal.cc
@@ -146,7 +146,14 @@ namespace LOFAR {
           itsParmExprs.push_back("Gain:1:1:Imag");
         }
       } else if (itsCorrectType == "tec") {
-        itsParmExprs.push_back("TEC");
+        if (itsParmDB->getNames("TEC:0:*").empty() &&
+                    itsParmDB->getDefNames("TEC:0:*").empty() ) {
+          itsParmExprs.push_back("TEC");
+        }
+        else {
+          itsParmExprs.push_back("TEC:0");
+          itsParmExprs.push_back("TEC:1");
+        }
       } else if (itsCorrectType == "clock") {
         if (itsParmDB->getNames("Clock:0:*").empty() &&
             itsParmDB->getDefNames("Clock:0:*").empty() ) {
@@ -364,8 +371,14 @@ namespace LOFAR {
           else if (itsCorrectType=="tec") {
             itsParms[0][ant][tf]=polar(1.,
                 parmvalues[0][ant][tf] * -8.44797245e9 / freq);
-            itsParms[1][ant][tf]=polar(1.,
-                parmvalues[0][ant][tf] * -8.44797245e9 / freq);
+            if (itsParmExprs.size() == 1) { // No TEC:0, only TEC:
+              itsParms[1][ant][tf]=polar(1.,
+                  parmvalues[0][ant][tf] * -8.44797245e9 / freq);
+            }
+            else { // TEC:0 and TEC:1
+              itsParms[1][ant][tf]=polar(1.,
+                  parmvalues[1][ant][tf] * -8.44797245e9 / freq);
+            }
           }
           else if (itsCorrectType=="clock") {
             itsParms[0][ant][tf]=polar(1.,