diff --git a/Wrap/swig/ignoreSample.i b/Wrap/swig/ignoreSample.i
index 390a8cb481f24be9aefec607c8dbeb607385cc9e..c6b71279036371ec179c3a1ff33aed7997585f7d 100644
--- a/Wrap/swig/ignoreSample.i
+++ b/Wrap/swig/ignoreSample.i
@@ -19,7 +19,6 @@
 %ignore FormFactorDWBAPol;
 %ignore ISampleVisitor::visit(const FormFactorDWBA*);
 %ignore ISampleVisitor::visit(const FormFactorDWBAPol*);
-%ignore ISpecularScan;
 %ignore Lattice2D::ReciprocalBases;
 %ignore Lattice2D::reciprocalBases();
 %ignore RoughMultiLayerComputation;
diff --git a/Wrap/swig/libBornAgainDevice.i b/Wrap/swig/libBornAgainDevice.i
index 0dbbab6adf5495c4ceda127c2b0b992c15d9fb2c..cb295ad5cf24bc674268f5c99b46281bedf87f65 100644
--- a/Wrap/swig/libBornAgainDevice.i
+++ b/Wrap/swig/libBornAgainDevice.i
@@ -23,6 +23,8 @@
 
 %include "ignoreBase.i"
 
+%ignore ISpecularScan;
+
 // deprecations:
 %rename(getArrayObsolete) IHistogram::getArray;
 %extend IHistogram {
diff --git a/auto/Wrap/libBornAgainDevice.py b/auto/Wrap/libBornAgainDevice.py
index 85831f073e65a05200b1c1cfd10a9764672962b6..00d8909930444761580fd0c8b7faf18d015cdecf 100644
--- a/auto/Wrap/libBornAgainDevice.py
+++ b/auto/Wrap/libBornAgainDevice.py
@@ -4285,47 +4285,7 @@ class VarianceSimFunction(IVarianceFunction):
 # Register VarianceSimFunction in _libBornAgainDevice:
 _libBornAgainDevice.VarianceSimFunction_swigregister(VarianceSimFunction)
 
-class ISpecularScan(libBornAgainBase.ICloneable):
-    r"""
-
-
-    Base abstract class for all types of specular scans.
-
-    C++ includes: ISpecularScan.h
-
-    """
-
-    thisown = property(lambda x: x.this.own(), lambda x, v: x.this.own(v), doc="The membership flag")
-
-    def __init__(self, *args, **kwargs):
-        raise AttributeError("No constructor defined - class is abstract")
-    __repr__ = _swig_repr
-    angle = _libBornAgainDevice.ISpecularScan_angle
-    
-    q = _libBornAgainDevice.ISpecularScan_q
-    
-    __swig_destroy__ = _libBornAgainDevice.delete_ISpecularScan
-
-    def clone(self):
-        r"""
-        clone(ISpecularScan self) -> ISpecularScan
-        ISpecularScan* ISpecularScan::clone() const override=0
-
-        """
-        return _libBornAgainDevice.ISpecularScan_clone(self)
-
-    def dataType(self):
-        r"""
-        dataType(ISpecularScan self) -> ISpecularScan::SPECULAR_DATA_TYPE
-        SPECULAR_DATA_TYPE ISpecularScan::dataType() const
-
-        """
-        return _libBornAgainDevice.ISpecularScan_dataType(self)
-
-# Register ISpecularScan in _libBornAgainDevice:
-_libBornAgainDevice.ISpecularScan_swigregister(ISpecularScan)
-
-class AngularSpecScan(ISpecularScan):
+class AngularSpecScan(object):
     r"""
 
 
@@ -4436,7 +4396,7 @@ class AngularSpecScan(ISpecularScan):
 # Register AngularSpecScan in _libBornAgainDevice:
 _libBornAgainDevice.AngularSpecScan_swigregister(AngularSpecScan)
 
-class QSpecScan(ISpecularScan):
+class QSpecScan(object):
     r"""
 
 
diff --git a/auto/Wrap/libBornAgainDevice_wrap.cpp b/auto/Wrap/libBornAgainDevice_wrap.cpp
index 7eb43ca24f295594bb8260ee9c12bc641b2ee5d4..13bead5a8d7e8ef8c0bce31bb6e4ce05be1d3de9 100644
--- a/auto/Wrap/libBornAgainDevice_wrap.cpp
+++ b/auto/Wrap/libBornAgainDevice_wrap.cpp
@@ -37160,81 +37160,6 @@ SWIGINTERN PyObject *VarianceSimFunction_swiginit(PyObject *SWIGUNUSEDPARM(self)
   return SWIG_Python_InitShadowInstance(args);
 }
 
-SWIGINTERN PyObject *_wrap_delete_ISpecularScan(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
-  PyObject *resultobj = 0;
-  ISpecularScan *arg1 = (ISpecularScan *) 0 ;
-  void *argp1 = 0 ;
-  int res1 = 0 ;
-  PyObject *swig_obj[1] ;
-  
-  if (!args) SWIG_fail;
-  swig_obj[0] = args;
-  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_ISpecularScan, SWIG_POINTER_DISOWN |  0 );
-  if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "delete_ISpecularScan" "', argument " "1"" of type '" "ISpecularScan *""'"); 
-  }
-  arg1 = reinterpret_cast< ISpecularScan * >(argp1);
-  delete arg1;
-  resultobj = SWIG_Py_Void();
-  return resultobj;
-fail:
-  return NULL;
-}
-
-
-SWIGINTERN PyObject *_wrap_ISpecularScan_clone(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
-  PyObject *resultobj = 0;
-  ISpecularScan *arg1 = (ISpecularScan *) 0 ;
-  void *argp1 = 0 ;
-  int res1 = 0 ;
-  PyObject *swig_obj[1] ;
-  ISpecularScan *result = 0 ;
-  
-  if (!args) SWIG_fail;
-  swig_obj[0] = args;
-  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_ISpecularScan, 0 |  0 );
-  if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "ISpecularScan_clone" "', argument " "1"" of type '" "ISpecularScan const *""'"); 
-  }
-  arg1 = reinterpret_cast< ISpecularScan * >(argp1);
-  result = (ISpecularScan *)((ISpecularScan const *)arg1)->clone();
-  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_ISpecularScan, 0 |  0 );
-  return resultobj;
-fail:
-  return NULL;
-}
-
-
-SWIGINTERN PyObject *_wrap_ISpecularScan_dataType(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
-  PyObject *resultobj = 0;
-  ISpecularScan *arg1 = (ISpecularScan *) 0 ;
-  void *argp1 = 0 ;
-  int res1 = 0 ;
-  PyObject *swig_obj[1] ;
-  ISpecularScan::SPECULAR_DATA_TYPE result;
-  
-  if (!args) SWIG_fail;
-  swig_obj[0] = args;
-  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_ISpecularScan, 0 |  0 );
-  if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "ISpecularScan_dataType" "', argument " "1"" of type '" "ISpecularScan const *""'"); 
-  }
-  arg1 = reinterpret_cast< ISpecularScan * >(argp1);
-  result = (ISpecularScan::SPECULAR_DATA_TYPE)((ISpecularScan const *)arg1)->dataType();
-  resultobj = SWIG_From_int(static_cast< int >(result));
-  return resultobj;
-fail:
-  return NULL;
-}
-
-
-SWIGINTERN PyObject *ISpecularScan_swigregister(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
-  PyObject *obj;
-  if (!SWIG_Python_UnpackTuple(args, "swigregister", 1, 1, &obj)) return NULL;
-  SWIG_TypeNewClientData(SWIGTYPE_p_ISpecularScan, SWIG_NewClientData(obj));
-  return SWIG_Py_Void();
-}
-
 SWIGINTERN PyObject *_wrap_new_AngularSpecScan__SWIG_0(PyObject *SWIGUNUSEDPARM(self), Py_ssize_t nobjs, PyObject **swig_obj) {
   PyObject *resultobj = 0;
   double arg1 ;
@@ -49054,22 +48979,6 @@ static PyMethodDef SwigMethods[] = {
 	 { "delete_VarianceSimFunction", _wrap_delete_VarianceSimFunction, METH_O, "delete_VarianceSimFunction(VarianceSimFunction self)"},
 	 { "VarianceSimFunction_swigregister", VarianceSimFunction_swigregister, METH_O, NULL},
 	 { "VarianceSimFunction_swiginit", VarianceSimFunction_swiginit, METH_VARARGS, NULL},
-	 { "delete_ISpecularScan", _wrap_delete_ISpecularScan, METH_O, "\n"
-		"delete_ISpecularScan(ISpecularScan self)\n"
-		"ISpecularScan::~ISpecularScan() override\n"
-		"\n"
-		""},
-	 { "ISpecularScan_clone", _wrap_ISpecularScan_clone, METH_O, "\n"
-		"ISpecularScan_clone(ISpecularScan self) -> ISpecularScan\n"
-		"ISpecularScan* ISpecularScan::clone() const override=0\n"
-		"\n"
-		""},
-	 { "ISpecularScan_dataType", _wrap_ISpecularScan_dataType, METH_O, "\n"
-		"ISpecularScan_dataType(ISpecularScan self) -> ISpecularScan::SPECULAR_DATA_TYPE\n"
-		"SPECULAR_DATA_TYPE ISpecularScan::dataType() const\n"
-		"\n"
-		""},
-	 { "ISpecularScan_swigregister", ISpecularScan_swigregister, METH_O, NULL},
 	 { "new_AngularSpecScan", _wrap_new_AngularSpecScan, METH_VARARGS, "\n"
 		"AngularSpecScan(double wl, vdouble1d_t inc_angle)\n"
 		"AngularSpecScan(double wl, IAxis inc_angle)\n"
@@ -51788,8 +51697,6 @@ SWIG_init(void) {
   // thread safe initialization
   swig::container_owner_attribute();
   
-  SWIG_Python_SetConstant(d, "ISpecularScan_angle",SWIG_From_int(static_cast< int >(ISpecularScan::angle)));
-  SWIG_Python_SetConstant(d, "ISpecularScan_q",SWIG_From_int(static_cast< int >(ISpecularScan::q)));
   SWIG_Python_SetConstant(d, "Axes_DEFAULT",SWIG_From_int(static_cast< int >(Axes::DEFAULT)));
   SWIG_Python_SetConstant(d, "Axes_NBINS",SWIG_From_int(static_cast< int >(Axes::NBINS)));
   SWIG_Python_SetConstant(d, "Axes_RADIANS",SWIG_From_int(static_cast< int >(Axes::RADIANS)));