diff --git a/__init__.py b/__init__.py
index e67262458e7995999f7626e3578ad9fffdadb3e3..9deddd46220b2a07376a6436b44c404b8e61fc0f 100644
--- a/__init__.py
+++ b/__init__.py
@@ -1,29 +1,30 @@
 #this file was generated by __init__.py.py
 
-from fedic import *
-from plot_binned_strains_vs_radius import *
+from fedic2 import *
 from NonlinearSolver import *
-from plot_strains_vs_radius import *
-from compute_unwarped_images import *
-from Problem_ImageRegistration import *
-from compute_quadrature_degree import *
-from Energy_Regularization import *
-from compute_warped_images import *
-from plot_strains import *
-from image_expressions_cpp import *
-from Energy import *
 from compute_warped_mesh import *
-from Energy_WarpedImage import *
-from write_VTU_file import *
-from generate_undersampled_images import *
-from plot_regional_strains import *
 from image_expressions_py import *
+from compute_warped_images import *
+from compute_unwarped_images import *
+from fedic import *
+from generate_images import *
+from plot_binned_strains_vs_radius import *
+from plot_regional_strains import *
 from ImageIterator import *
-from fedic2 import *
-from plot_displacement_error import *
 from Problem import *
+from Energy_WarpedImage import *
+from generate_undersampled_images import *
+from Energy_Regularization import *
+from compute_strains import *
 from compute_displacements import *
-from generate_images import *
-from ImageSeries import *
 from compute_displacement_error import *
-from compute_strains import *
+from ImageSeries import *
+from compute_quadrature_degree import *
+from generated_image_expressions_cpp import *
+from write_VTU_file import *
+from Energy import *
+from image_expressions_cpp import *
+from Problem_ImageRegistration import *
+from plot_strains import *
+from plot_displacement_error import *
+from plot_strains_vs_radius import *
diff --git a/generated_image_expressions_cpp.py b/generated_image_expressions_cpp.py
new file mode 100644
index 0000000000000000000000000000000000000000..6c8b6f5bb43a25d7d567427975705599e49fd815
--- /dev/null
+++ b/generated_image_expressions_cpp.py
@@ -0,0 +1,91 @@
+#coding=utf8
+
+################################################################################
+###                                                                          ###
+### Created by Martin Genet, 2016-2018                                       ###
+###                                                                          ###
+### École Polytechnique, Palaiseau, France                                   ###
+###                                                                          ###
+################################################################################
+
+################################################################################
+
+def get_ExprGenIm_cpp(
+        im_dim,
+        verbose=0):
+
+    assert (im_dim in (2,3))
+
+    ExprGenIm_cpp = '''\
+#include <string.h>
+
+#include <vtkSmartPointer.h>
+#include <vtkStructuredPointsReader.h>
+#include <vtkXMLImageDataReader.h>
+#include <vtkImageData.h>
+#include <vtkImageInterpolator.h>
+
+double getStaticScalingFactor(const char* scalar_type_as_string)
+{
+    if (strcmp(scalar_type_as_string, "unsigned char" ) == 0) return pow(2,  8)-1;
+    if (strcmp(scalar_type_as_string, "unsigned short") == 0) return pow(2, 16)-1;
+    if (strcmp(scalar_type_as_string, "unsigned int"  ) == 0) return pow(2, 32)-1;
+    if (strcmp(scalar_type_as_string, "unsigned long" ) == 0) return pow(2, 64)-1;
+    if (strcmp(scalar_type_as_string, "float"         ) == 0) return 1.;
+    if (strcmp(scalar_type_as_string, "double"        ) == 0) return 1.;
+    assert (0);
+}
+
+namespace dolfin
+{
+
+class MyExpr : public Expression
+{
+    vtkSmartPointer<vtkImageInterpolator> interpolator;
+    double static_scaling;
+
+public:
+
+    MyExpr():
+        Expression()
+    {
+    }
+
+    void init_image(
+        const char* filename)
+    {
+        vtkSmartPointer<vtkXMLImageDataReader> reader = vtkSmartPointer<vtkXMLImageDataReader>::New();
+        reader->SetFileName(filename);
+        reader->Update();
+
+        static_scaling = getStaticScalingFactor(reader->GetOutput()->GetScalarTypeAsString());
+
+        interpolator = vtkSmartPointer<vtkImageInterpolator>::New();
+        interpolator->SetInterpolationModeToLinear();
+        interpolator->SetOutValue(0.);
+        interpolator->Initialize(reader->GetOutput());
+        interpolator->Update();
+    }
+
+    void eval(Array<double>& expr, const Array<double>& X) const
+    {'''+('''
+        std::cout << "X = " << X.str(1) << std::endl;''')*(verbose)+('''
+
+        X3D[0] = X[0];
+        X3D[1] = X[1];'''+('''
+        std::cout << "X3D = " << X3D.str(1) << std::endl;''')*(verbose)+'''
+        interpolator->Interpolate(X3D.data(), expr.data());''')*(im_dim==2)+('''
+
+        interpolator->Interpolate(X.data(), expr.data());''')*(im_dim==3)+('''
+
+        std::cout << "expr = " << expr.str(1) << std::endl;''')*(verbose)+'''
+
+        expr[0] /= static_scaling;'''+('''
+
+        std::cout << "expr = " << expr.str(1) << std::endl;''')*(verbose)+'''
+    }
+};
+
+}'''
+    #print ExprGenIm_cpp
+    return ExprGenIm_cpp