diff --git a/Core/Multilayer/SpecularScalarNCStrategy.cpp b/Core/Multilayer/SpecularScalarNCStrategy.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..51e8ae3ed80d79d605ff84e203a900537b900d01
--- /dev/null
+++ b/Core/Multilayer/SpecularScalarNCStrategy.cpp
@@ -0,0 +1,48 @@
+// ************************************************************************** //
+//
+//  BornAgain: simulate and fit scattering at grazing incidence
+//
+//! @file      Core/Multilayer/SpecularMatrix.cpp
+//! @brief     Implements class SpecularMatrix.
+//!
+//! @homepage  http://www.bornagainproject.org
+//! @license   GNU General Public License v3 or higher (see COPYING)
+//! @copyright Forschungszentrum Jülich GmbH 2018
+//! @authors   Scientific Computing Group at MLZ (see CITATION, AUTHORS)
+//
+// ************************************************************************** //
+
+#include "SpecularScalarNCStrategy.h"
+#include "KzComputation.h"
+#include "Layer.h"
+#include "LayerRoughness.h"
+#include "MathConstants.h"
+#include "MathFunctions.h"
+#include "Slice.h"
+#include <Eigen/Dense>
+#include <stdexcept>
+#include <valarray>
+
+
+
+Eigen::Vector2cd SpecularScalarNCStrategy::transition(complex_t kzi, complex_t kzi1, double sigma, double thickness,
+                                     const Eigen::Vector2cd& t_r1) const
+{
+    complex_t roughness_diff = 1;
+    complex_t roughness_sum  = 1;
+    if (sigma > 0.0) {
+        roughness_diff = exp( - (kzi1 - kzi) * (kzi1 - kzi) * sigma * sigma / 2. );
+        roughness_sum  = exp( - (kzi1 + kzi) * (kzi1 + kzi) * sigma * sigma / 2. );
+    }
+    const complex_t phase_shift = exp_I(kzi * thickness);
+    const complex_t kz_ratio = kzi1 / kzi;
+    
+    const complex_t a00 = 0.5 * ( 1. + kz_ratio ) * roughness_diff;
+    const complex_t a01 = 0.5 * ( 1. - kz_ratio ) * roughness_sum;
+    
+    Eigen::Vector2cd result;
+    result << (a00 * t_r1(0) + a01 * t_r1(1)) / phase_shift,
+    (a01 * t_r1(0) + a00 * t_r1(1)) * phase_shift;
+    return result;
+}
+
diff --git a/Core/Multilayer/SpecularScalarNCStrategy.h b/Core/Multilayer/SpecularScalarNCStrategy.h
new file mode 100644
index 0000000000000000000000000000000000000000..24c5b6311edf5b9cb22719044809492ed449faa0
--- /dev/null
+++ b/Core/Multilayer/SpecularScalarNCStrategy.h
@@ -0,0 +1,38 @@
+// ************************************************************************** //
+//
+//  BornAgain: simulate and fit scattering at grazing incidence
+//
+//! @file      Core/Multilayer/SpecularMatrix.h
+//! @brief     Defines namespace SpecularMatrix.
+//!
+//! @homepage  http://www.bornagainproject.org
+//! @license   GNU General Public License v3 or higher (see COPYING)
+//! @copyright Forschungszentrum Jülich GmbH 2018
+//! @authors   Scientific Computing Group at MLZ (see CITATION, AUTHORS)
+//
+// ************************************************************************** //
+
+#ifndef SPECULARSCALARNCSTRATEGY_H
+#define SPECULARSCALARNCSTRATEGY_H
+
+#include "SpecularScalarStrategy.h"
+
+class Slice;
+
+//! Implements method 'execute' to compute refraction angles and transmission/reflection
+//! coefficients for coherent wave propagation in a multilayer.
+//! @ingroup algorithms_internal
+
+class SpecularScalarNCStrategy : public SpecularScalarStrategy
+{
+public:
+
+
+private:
+    virtual Eigen::Vector2cd transition(complex_t kzi, complex_t kzi1, double sigma, double thickness,
+                                        const Eigen::Vector2cd& t_r1) const override;
+
+
+};
+
+#endif // SPECULARSCALARNCSTRATEGY_H
diff --git a/Core/Multilayer/SpecularStrategyBuilder.cpp b/Core/Multilayer/SpecularStrategyBuilder.cpp
index b937bd3c35048925b2d2d996345a7f2a12f3d55d..917571313597e47eb62bc111619b70251bf8dcc6 100644
--- a/Core/Multilayer/SpecularStrategyBuilder.cpp
+++ b/Core/Multilayer/SpecularStrategyBuilder.cpp
@@ -32,7 +32,7 @@ std::unique_ptr<ISpecularStrategy> SpecularStrategyBuilder::build(const MultiLay
 
         } else if (roughnessModel == "nc" || roughnessModel == "nevot-croce") {
 
-            throw std::runtime_error("Nevot-Croce not yet implemented");
+            return std::make_unique<SpecularScalarNCStrategy>();
 
         } else if (roughnessModel == "tanh") {
             return std::make_unique<SpecularScalarTanhStrategy>();
diff --git a/Core/Multilayer/SpecularStrategyBuilder.h b/Core/Multilayer/SpecularStrategyBuilder.h
index 6f9b2faf6f5385eb3b291e2d30bb71829646ef07..7838c810ea55b5cdcf31f10ee7f49b82e6ef49fe 100644
--- a/Core/Multilayer/SpecularStrategyBuilder.h
+++ b/Core/Multilayer/SpecularStrategyBuilder.h
@@ -19,7 +19,7 @@
 #include "MultiLayer.h"
 #include "MultiLayerUtils.h"
 #include "SpecularMagneticStrategy.h"
-#include "SpecularScalarStrategy.h"
+#include "SpecularScalarNCStrategy.h"
 #include "SpecularScalarTanhStrategy.h"
 
 class SpecularStrategyBuilder