diff --git a/problems/cosserat-continuum-cantilever.parset b/problems/cosserat-continuum-cantilever.parset
deleted file mode 100644
index ac1a07651c4e668550e5797e222e597df6073367..0000000000000000000000000000000000000000
--- a/problems/cosserat-continuum-cantilever.parset
+++ /dev/null
@@ -1,113 +0,0 @@
-#############################################
-#  Grid parameters
-#############################################
-
-structuredGrid = cube
-
-# bounding box
-lower = 0 0
-upper = 100 10
-
-elements = 10 1
-
-# Number of grid levels
-numLevels = 1
-
-#############################################
-#  Solver parameters
-#############################################
-
-# Number of homotopy steps for the Dirichlet boundary conditions
-numHomotopySteps = 1
-
-# Solver type: trustRegion or proximalNewton
-solvertype = trustRegion
-
-# Tolerance of the trust region solver
-tolerance = 1e-3
-
-# Max number of steps of the trust region solver
-maxSolverSteps = 200
-
-solverScaling = 1 1 1 0.01 0.01 0.01
-
-# Initial trust-region radius
-initialTrustRegionRadius = 3.125
-
-# Number of multigrid iterations per trust-region step
-numIt = 400
-
-# Number of presmoothing steps
-nu1 = 3
-
-# Number of postsmoothing steps
-nu2 = 3
-
-# Number of coarse grid corrections
-mu = 1
-
-# Number of base solver iterations
-baseIt = 1
-
-# Tolerance of the multigrid solver
-mgTolerance = 1e-5
-
-# Tolerance of the base grid solver
-baseTolerance = 1e-8
-
-# Measure convergence
-instrumented = 0
-
-############################
-#   Material parameters
-############################
-
-
-## For the Wriggers L-shape example
-[materialParameters]
-
-# shell thickness
-thickness = 0.6
-
-# Lame parameters
-# corresponds to E = 71240 N/mm^2, nu=0.31
-# However, we use units N/m^2
-mu = 2.7191e+4
-lambda = 4.4364e+4
-
-# Cosserat couple modulus
-mu_c = 0
-
-# Length scale parameter
-L_c = 0.6
-
-# Curvature exponent
-q = 2
-
-# Shear correction factor
-kappa = 1
-
-[]
-
-#############################################
-#  Boundary values
-#############################################
-
-problem = cantilever
-
-###  Python predicate specifying all Dirichlet grid vertices
-# x is the vertex coordinate
-dirichletVerticesPredicate = "x[0] < 0.01"
-
-###  Python predicate specifying all Neumann grid vertices
-# x is the vertex coordinate
-neumannVerticesPredicate = "x[0] > 99.99"
-
-###  Neumann values
-neumannValues = 0 0 3
-
-# Initial deformation
-initialDeformation = "[x[0], x[1], 0]"
-
-#startFromFile = yes
-#initialIterateFilename = initial_iterate.vtu
diff --git a/problems/cosserat-continuum-cantilever.py b/problems/cosserat-continuum-cantilever.py
new file mode 100644
index 0000000000000000000000000000000000000000..538adaa62213f07e520d0fb2c09bb07abdf47d3d
--- /dev/null
+++ b/problems/cosserat-continuum-cantilever.py
@@ -0,0 +1,127 @@
+import math
+
+class ParameterSet(dict):
+    def __init__(self, *args, **kwargs):
+        super(ParameterSet, self).__init__(*args, **kwargs)
+        self.__dict__ = self
+
+parameterSet = ParameterSet()
+
+
+#############################################
+#  Grid parameters
+#############################################
+
+parameterSet.structuredGrid = "cube"
+
+# bounding box
+parameterSet.lower = "0 0"
+parameterSet.upper = "100 10"
+
+parameterSet.elements = "10 1"
+
+# Number of grid levels
+parameterSet.numLevels = 1
+
+#############################################
+#  Solver parameters
+#############################################
+
+# Number of homotopy steps for the Dirichlet boundary conditions
+parameterSet.numHomotopySteps = 1
+
+# Solver type: "trustRegion" or "proximalNewton"
+parameterSet.solvertype = "trustRegion"
+
+# Tolerance of the trust region solver
+parameterSet.tolerance = 1e-3
+
+# Max number of steps of the trust region solver
+parameterSet.maxSolverSteps = 200
+
+parameterSet.solverScaling = "1 1 1 0.01 0.01 0.01"
+
+# Initial trust-region radius
+parameterSet.initialTrustRegionRadius = 3.125
+
+# Number of multigrid iterations per trust-region step
+parameterSet.numIt = 400
+
+# Number of presmoothing steps
+parameterSet.nu1 = 3
+
+# Number of postsmoothing steps
+parameterSet.nu2 = 3
+
+# Number of coarse grid corrections
+parameterSet.mu = 1
+
+# Number of base solver iterations
+parameterSet.baseIt = 1
+
+# Tolerance of the multigrid solver
+parameterSet.mgTolerance = 1e-5
+
+# Tolerance of the base grid solver
+parameterSet.baseTolerance = 1e-8
+
+# Measure convergence
+parameterSet.instrumented = 0
+
+############################
+#   Material parameters
+############################
+
+parameterSet.materialParameters = ParameterSet()
+
+# shell thickness
+parameterSet.materialParameters.thickness = 0.6
+
+# Lame parameters
+# corresponds to E = 71240 N/mm^2, nu=0.31
+# However, we use units N/m^2
+parameterSet.materialParameters.mu = 2.7191e+4
+parameterSet.materialParameters["lambda"] = 4.4364e+4
+
+# Cosserat couple modulus
+parameterSet.materialParameters.mu_c = 0
+
+# Length scale parameter
+parameterSet.materialParameters.L_c = 0.6
+
+# Curvature exponent
+parameterSet.materialParameters.q = 2
+
+# Shear correction factor
+parameterSet.materialParameters.kappa = 1
+
+# TODO: These three parameters are not actually used,
+# but the current implementation requires them nevertheless.
+parameterSet.materialParameters.b1 = 1
+parameterSet.materialParameters.b2 = 1
+parameterSet.materialParameters.b3 = 1
+
+
+#############################################
+#  Boundary values
+#############################################
+
+parameterSet.problem = "cantilever"
+
+###  Python predicate specifying all Dirichlet grid vertices
+# x is the vertex coordinate
+parameterSet.dirichletVerticesPredicate = "[x[0] < 0.01, x[0] < 0.01, x[0] < 0.01]"
+parameterSet.dirichletRotationVerticesPredicate = "x[0] < 0.01"
+
+###  Python predicate specifying all Neumann grid vertices
+# x is the vertex coordinate
+parameterSet.neumannVerticesPredicate = "x[0] > 99.99"
+
+###  Neumann values
+parameterSet.neumannValues = "0 0 3"
+
+# Initial deformation
+parameterSet.initialDeformation = "[x[0], x[1], 0]"
+
+#parameterSet.startFromFile = yes
+#parameterSet.initialIterateFilename = initial_iterate.vtu
diff --git a/problems/cosserat-continuum-twisted-strip.parset b/problems/cosserat-continuum-twisted-strip.parset
deleted file mode 100644
index 84cad73cd20f3b65a0c7c7ca72ac7921cc779749..0000000000000000000000000000000000000000
--- a/problems/cosserat-continuum-twisted-strip.parset
+++ /dev/null
@@ -1,105 +0,0 @@
-#############################################
-#  Grid parameters
-#############################################
-
-structuredGrid = cube
-lower = 0  -0.005
-upper = 0.1 0.005
-elements = 10 1
-
-# Number of grid levels
-numLevels = 1
-
-#############################################
-#  Solver parameters
-#############################################
-
-# Number of homotopy steps for the Dirichlet boundary conditions
-numHomotopySteps = 24
-
-# Tolerance of the trust region solver
-tolerance = 1e-8
-
-# Max number of steps of the trust region solver
-maxSolverSteps = 200
-
-solverScaling = 1 1 1 1 1 1
-
-# Initial trust-region radius
-initialTrustRegionRadius = 0.1
-
-# Number of multigrid iterations per trust-region step
-numIt = 200
-
-# Number of presmoothing steps
-nu1 = 3
-
-# Number of postsmoothing steps
-nu2 = 3
-
-# Number of coarse grid corrections
-mu = 1
-
-# Number of base solver iterations
-baseIt = 100
-
-# Tolerance of the multigrid solver
-mgTolerance = 1e-7
-
-# Tolerance of the base grid solver
-baseTolerance = 1e-8
-
-# Measure convergence
-instrumented = 0
-
-############################
-#   Material parameters
-############################
-
-
-# Parameters for the twisted 0.1x0.01 strip
-[materialParameters]
-
-# shell thickness
-thickness = 0.002
-
-# Lame parameters
-# corresponds to E = 3.5GPa, nu=0.31
-mu = 5.6452e+09
-lambda = 2.1796e+09
-
-# Cosserat couple modulus
-mu_c = 0
-
-# Length scale parameter
-L_c = 2e-6
-
-# Curvature exponent
-q = 2
-
-# Shear correction factor
-kappa = 1
-
-# TODO: These three parameters are not actually used,
-# but the current implementation requires them nevertheless.
-b1 = 1
-b2 = 1
-b3 = 1
-
-[]
-
-#############################################
-#  Boundary values
-#############################################
-
-problem = twisted-strip
-
-###  Python predicate specifying all Dirichlet grid vertices
-# x is the vertex coordinate
-dirichletVerticesPredicate = "[x[0] < 0.001 or x[0] > 0.0999, x[0] < 0.001 or x[0] > 0.0999, x[0] < 0.001 or x[0] > 0.0999]"
-dirichletRotationVerticesPredicate = "x[0] < 0.001 or x[0] > 0.0999"
-
-# Initial deformation
-initialDeformation = "[x[0], x[1], 0]"
-
-
diff --git a/problems/cosserat-continuum-twisted-strip.py b/problems/cosserat-continuum-twisted-strip.py
new file mode 100644
index 0000000000000000000000000000000000000000..b8120ec67ce72cd82f6739de129d46f2634e5281
--- /dev/null
+++ b/problems/cosserat-continuum-twisted-strip.py
@@ -0,0 +1,116 @@
+import math
+
+class ParameterSet(dict):
+    def __init__(self, *args, **kwargs):
+        super(ParameterSet, self).__init__(*args, **kwargs)
+        self.__dict__ = self
+
+parameterSet = ParameterSet()
+
+#############################################
+#  Grid parameters
+#############################################
+
+parameterSet.structuredGrid = "cube"
+parameterSet.lower = "0  -0.005"
+parameterSet.upper = "0.1 0.005"
+parameterSet.elements = "10 1"
+
+# Number of grid levels
+parameterSet.numLevels = 1
+
+#############################################
+#  Solver parameters
+#############################################
+
+# Number of homotopy steps for the Dirichlet boundary conditions
+parameterSet.numHomotopySteps = 24
+
+# Tolerance of the trust region solver
+parameterSet.tolerance = 1e-8
+
+# Max number of steps of the trust region solver
+parameterSet.maxSolverSteps = 200
+
+parameterSet.solverScaling = "1 1 1 1 1 1"
+
+# Initial trust-region radius
+parameterSet.initialTrustRegionRadius = 0.1
+
+# Number of multigrid iterations per trust-region step
+parameterSet.numIt = 200
+
+# Number of presmoothing steps
+parameterSet.nu1 = 3
+
+# Number of postsmoothing steps
+parameterSet.nu2 = 3
+
+# Number of coarse grid corrections
+parameterSet.mu = 1
+
+# Number of base solver iterations
+parameterSet.baseIt = 100
+
+# Tolerance of the multigrid solver
+parameterSet.mgTolerance = 1e-7
+
+# Tolerance of the base grid solver
+parameterSet.baseTolerance = 1e-8
+
+# Measure convergence
+parameterSet.instrumented = 0
+
+############################
+#   Material parameters
+############################
+
+
+# Parameters for the twisted 0.1x0.01 strip
+parameterSet.materialParameters = ParameterSet()
+
+# shell thickness
+parameterSet.materialParameters.thickness = 0.002
+
+# Lame parameters
+# corresponds to E = 3.5GPa, nu=0.31
+# (Notice that lambda is a key word in python such that
+# we cannot use attribute syntax to set it but have to
+# resort to dictionary syntax.)
+parameterSet.materialParameters.mu = 5.6452e+09
+parameterSet.materialParameters['lambda'] = 2.1796e+09
+
+# Cosserat couple modulus
+parameterSet.materialParameters.mu_c = 0
+
+# Length scale parameter
+parameterSet.materialParameters.L_c = 2e-6
+
+# Curvature exponent
+parameterSet.materialParameters.q = 2
+
+# Shear correction factor
+parameterSet.materialParameters.kappa = 1
+
+# TODO: These three parameters are not actually used,
+# but the current implementation requires them nevertheless.
+parameterSet.materialParameters.b1 = 1
+parameterSet.materialParameters.b2 = 1
+parameterSet.materialParameters.b3 = 1
+
+
+#############################################
+#  Boundary values
+#############################################
+
+parameterSet.problem = "twisted-strip"
+
+###  Python predicate specifying all Dirichlet grid vertices
+# x is the vertex coordinate
+parameterSet.dirichletVerticesPredicate = "[x[0] < 0.001 or x[0] > 0.0999, x[0] < 0.001 or x[0] > 0.0999, x[0] < 0.001 or x[0] > 0.0999]"
+parameterSet.dirichletRotationVerticesPredicate = "x[0] < 0.001 or x[0] > 0.0999"
+
+# Initial deformation
+parameterSet.initialDeformation = "[x[0], x[1], 0]"
+
+
diff --git a/problems/cosserat-continuum-wong-pellegrino-wrinkling.parset b/problems/cosserat-continuum-wong-pellegrino-wrinkling.parset
deleted file mode 100644
index 4af4a38d59003379a994bb2db4d246ac43351ceb..0000000000000000000000000000000000000000
--- a/problems/cosserat-continuum-wong-pellegrino-wrinkling.parset
+++ /dev/null
@@ -1,99 +0,0 @@
-#############################################
-#  Grid parameters
-#############################################
-
-structuredGrid = true
-lower = 0 0
-upper = 0.38 0.128
-elements = 15 5
-
-# Number of grid levels
-numLevels = 1
-
-#############################################
-#  Solver parameters
-#############################################
-
-# Number of homotopy steps for the Dirichlet boundary conditions
-numHomotopySteps = 1
-
-# Tolerance of the trust region solver
-tolerance = 1e-8
-
-# Max number of steps of the trust region solver
-maxTrustRegionSteps = 500
-
-solverScaling = 1 1 1 0.01 0.01 0.01
-
-# Initial trust-region radius
-initialTrustRegionRadius = 0.001
-
-# Number of multigrid iterations per trust-region step
-numIt = 200
-
-# Number of presmoothing steps
-nu1 = 3
-
-# Number of postsmoothing steps
-nu2 = 3
-
-# Number of coarse grid corrections
-mu = 1
-
-# Number of base solver iterations
-baseIt = 100
-
-# Tolerance of the multigrid solver
-mgTolerance = 1e-7
-
-# Tolerance of the base grid solver
-baseTolerance = 1e-8
-
-# Measure convergence
-instrumented = 0
-
-############################
-#   Material parameters
-############################
-
-
-# Parameters for the shearing/wrinkling example from Wong/Pellegrino 2006
-# We use 'meters' as the length unit
-[materialParameters]
-
-# shell thickness
-thickness = 2.5e-5
-
-# Lame parameters
-# corresponds to E = 3.5GPa, nu=0.31
-mu = 5.6452e+09
-lambda = 2.1796e+09
-
-# Cosserat couple modulus
-mu_c = 0
-
-# Length scale parameter
-L_c = 2.5e-8
-
-# Curvature exponent
-q = 2
-
-# Shear correction factor
-kappa = 1
-
-[]
-
-#############################################
-#  Boundary values
-#############################################
-
-problem = wong-pellegrino
-
-###  Python predicate specifying all Dirichlet grid vertices
-# x is the vertex coordinate
-dirichletVerticesPredicate = "x[1] < 0.0001 or x[1] > 0.128 - 0.0001"
-
-# Initial deformation
-#startFromFile = true
-initialIterateFilename = cosserat_iterate_2.vtu
-initialDeformation = "[x[0] + 0.003*x[1] / 0.128, x[1], 0.002*math.cos(1e4*x[0])]"
diff --git a/problems/cosserat-continuum-wong-pellegrino-wrinkling.py b/problems/cosserat-continuum-wong-pellegrino-wrinkling.py
new file mode 100644
index 0000000000000000000000000000000000000000..cffce1393db4f18dbb0afcd16b1444d78ca49703
--- /dev/null
+++ b/problems/cosserat-continuum-wong-pellegrino-wrinkling.py
@@ -0,0 +1,115 @@
+import math
+
+class ParameterSet(dict):
+    def __init__(self, *args, **kwargs):
+        super(ParameterSet, self).__init__(*args, **kwargs)
+        self.__dict__ = self
+
+parameterSet = ParameterSet()
+
+#############################################
+#  Grid parameters
+#############################################
+
+parameterSet.structuredGrid = "cube"
+parameterSet.lower = "0 0"
+parameterSet.upper = "0.38 0.128"
+parameterSet.elements = "15 5"
+
+# Number of grid levels
+parameterSet.numLevels = 1
+
+#############################################
+#  Solver parameters
+#############################################
+
+# Number of homotopy steps for the Dirichlet boundary conditions
+parameterSet.numHomotopySteps = 1
+
+# Tolerance of the trust region solver
+parameterSet.tolerance = 1e-8
+
+# Max number of steps of the trust region solver
+parameterSet.maxSolverSteps = 500
+
+parameterSet.solverScaling = "1 1 1 0.01 0.01 0.01"
+
+# Initial trust-region radius
+parameterSet.initialTrustRegionRadius = 0.001
+
+# Number of multigrid iterations per trust-region step
+parameterSet.numIt = 200
+
+# Number of presmoothing steps
+parameterSet.nu1 = 3
+
+# Number of postsmoothing steps
+parameterSet.nu2 = 3
+
+# Number of coarse grid corrections
+parameterSet.mu = 1
+
+# Number of base solver iterations
+parameterSet.baseIt = 100
+
+# Tolerance of the multigrid solver
+parameterSet.mgTolerance = 1e-7
+
+# Tolerance of the base grid solver
+parameterSet.baseTolerance = 1e-8
+
+# Measure convergence
+parameterSet.instrumented = 0
+
+
+############################
+#   Material parameters
+############################
+
+
+# Parameters for the shearing/wrinkling example from Wong/Pellegrino 2006
+# We use 'meters' as the length unit
+parameterSet.materialParameters = ParameterSet()
+
+# shell thickness
+parameterSet.materialParameters.thickness = 2.5e-5
+
+# Lame parameters
+# corresponds to E = 3.5GPa, nu=0.31
+parameterSet.materialParameters.mu = 5.6452e+09
+parameterSet.materialParameters["lambda"] = 2.1796e+09
+
+# Cosserat couple modulus
+parameterSet.materialParameters.mu_c = 0
+
+# Length scale parameter
+parameterSet.materialParameters.L_c = 2.5e-8
+
+# Curvature exponent
+parameterSet.materialParameters.q = 2
+
+# Shear correction factor
+parameterSet.materialParameters.kappa = 1
+
+# TODO: These three parameters are not actually used,
+# but the current implementation requires them nevertheless.
+parameterSet.materialParameters.b1 = 1
+parameterSet.materialParameters.b2 = 1
+parameterSet.materialParameters.b3 = 1
+
+
+#############################################
+#  Boundary values
+#############################################
+
+parameterSet.problem = "wong-pellegrino"
+
+###  Python predicate specifying all Dirichlet grid vertices
+# x is the vertex coordinate
+parameterSet.dirichletVerticesPredicate = "[x[1] < 0.0001 or x[1] > 0.128 - 0.0001, x[1] < 0.0001 or x[1] > 0.128 - 0.0001, x[1] < 0.0001 or x[1] > 0.128 - 0.0001]"
+parameterSet.dirichletRotationVerticesPredicate = "x[1] < 0.0001 or x[1] > 0.128 - 0.0001"
+
+# Initial deformation
+#parameterSet.startFromFile = True
+parameterSet.initialIterateFilename = "cosserat_iterate_2.vtu"
+parameterSet.initialDeformation = "[x[0] + 0.003*x[1] / 0.128, x[1], 0.002*math.cos(1e4*x[0])]"
diff --git a/problems/cosserat-continuum-wriggers-l-shape.parset b/problems/cosserat-continuum-wriggers-l-shape.parset
deleted file mode 100644
index 745f333600956d4c13e55af38ef37db5d6e7d74e..0000000000000000000000000000000000000000
--- a/problems/cosserat-continuum-wriggers-l-shape.parset
+++ /dev/null
@@ -1,108 +0,0 @@
-#############################################
-#  Grid parameters
-#############################################
-
-structuredGrid = false
-path = /home/sander/data/shells/wriggers_L_shape/
-gridFile = wriggers-L-shape_99_mm.msh
-
-# Number of grid levels
-numLevels = 2
-
-#############################################
-#  Solver parameters
-#############################################
-
-# Number of homotopy steps for the Dirichlet boundary conditions
-numHomotopySteps = 1
-
-# Tolerance of the trust region solver
-tolerance = 1e-8
-
-# Max number of steps of the trust region solver
-maxSolverSteps = 1000
-
-solverScaling = 1 1 1 0.01 0.01 0.01
-
-# Initial trust-region radius
-initialTrustRegionRadius = 1
-
-# Number of multigrid iterations per trust-region step
-numIt = 200
-
-# Number of presmoothing steps
-nu1 = 3
-
-# Number of postsmoothing steps
-nu2 = 3
-
-# Number of coarse grid corrections
-mu = 1
-
-# Number of base solver iterations
-baseIt = 1
-
-# Tolerance of the multigrid solver
-mgTolerance = 1e-7
-
-# Tolerance of the base grid solver
-baseTolerance = 1e-8
-
-# Measure convergence
-instrumented = 0
-
-############################
-#   Material parameters
-############################
-
-
-## For the Wriggers L-shape example
-[materialParameters]
-
-# shell thickness
-thickness = 0.6
-
-# Lame parameters
-# corresponds to E = 71240 N/mm^2, nu=0.31
-# However, we use units N/m^2
-mu = 2.7191e+4
-lambda = 4.4364e+4
-
-# Cosserat couple modulus
-mu_c = 0
-
-# Length scale parameter
-L_c = 0.6e-3
-
-# Curvature exponent
-q = 2
-
-# Shear correction factor
-kappa = 1
-
-[]
-
-#############################################
-#  Boundary values
-#############################################
-
-problem = wriggers-l-shape
-
-###  Python predicate specifying all Dirichlet grid vertices
-# x is the vertex coordinate
-dirichletVerticesPredicate = "x[0] < 1"
-
-###  Python predicate specifying all Dirichlet grid vertices
-# x is the vertex coordinate
-neumannVerticesPredicate = "x[1] < -239"
-
-###  Neumann values, if needed
-neumannValues =  0.09 0 0
-
-# Initial deformation
-#initialDeformation = "[x[0], x[1], 0 if (x[0] < 225 or x[1] < -15) else 0.001*(x[0]-225)*(x[1]+15)]"
-##initialDeformation = "[x[0], x[1], 0]"
-
-startFromFile = yes
-initialIterateGridFilename = wriggers-L-shape_99_mm.msh
-initialIterateFilename = initial-wriggers-l-shape.vtu
diff --git a/problems/cosserat-continuum-wriggers-l-shape.py b/problems/cosserat-continuum-wriggers-l-shape.py
new file mode 100644
index 0000000000000000000000000000000000000000..0481d04466a84ccfd9cc49cc5abbf145e5527c26
--- /dev/null
+++ b/problems/cosserat-continuum-wriggers-l-shape.py
@@ -0,0 +1,121 @@
+import math
+
+class ParameterSet(dict):
+    def __init__(self, *args, **kwargs):
+        super(ParameterSet, self).__init__(*args, **kwargs)
+        self.__dict__ = self
+
+parameterSet = ParameterSet()
+
+#############################################
+#  Grid parameters
+#############################################
+
+parameterSet.structuredGrid = "false"
+parameterSet.path = "/home/sander/data/shells/wriggers_L_shape/"
+parameterSet.gridFile = "wriggers-L-shape_99_mm.msh"
+
+# Number of grid levels
+parameterSet.numLevels = 2
+
+#############################################
+#  Solver parameters
+#############################################
+
+# Number of homotopy steps for the Dirichlet boundary conditions
+parameterSet.numHomotopySteps = 1
+
+# Tolerance of the trust region solver
+parameterSet.tolerance = 1e-8
+
+# Max number of steps of the trust region solver
+parameterSet.maxSolverSteps = 1000
+
+parameterSet.solverScaling = "1 1 1 0.01 0.01 0.01"
+
+# Initial trust-region radius
+parameterSet.initialTrustRegionRadius = 1
+
+# Number of multigrid iterations per trust-region step
+parameterSet.numIt = 200
+
+# Number of presmoothing steps
+parameterSet.nu1 = 3
+
+# Number of postsmoothing steps
+parameterSet.nu2 = 3
+
+# Number of coarse grid corrections
+parameterSet.mu = 1
+
+# Number of base solver iterations
+parameterSet.baseIt = 1
+
+# Tolerance of the multigrid solver
+parameterSet.mgTolerance = 1e-7
+
+# Tolerance of the base grid solver
+parameterSet.baseTolerance = 1e-8
+
+# Measure convergence
+parameterSet.instrumented = 0
+
+############################
+#   Material parameters
+############################
+
+parameterSet.materialParameters = ParameterSet()
+
+# shell thickness
+parameterSet.materialParameters.thickness = 0.6
+
+# Lame parameters
+# corresponds to E = 71240 N/mm^2, nu=0.31
+# However, we use units N/m^2
+parameterSet.materialParameters.mu = 2.7191e+4
+parameterSet.materialParameters["lambda"] = 4.4364e+4
+
+# Cosserat couple modulus
+parameterSet.materialParameters.mu_c = 0
+
+# Length scale parameter
+parameterSet.materialParameters.L_c = 0.6e-3
+
+# Curvature exponent
+parameterSet.materialParameters.q = 2
+
+# Shear correction factor
+parameterSet.materialParameters.kappa = 1
+
+# TODO: These three parameters are not actually used,
+# but the current implementation requires them nevertheless.
+parameterSet.materialParameters.b1 = 1
+parameterSet.materialParameters.b2 = 1
+parameterSet.materialParameters.b3 = 1
+
+
+#############################################
+#  Boundary values
+#############################################
+
+parameterSet.problem = "wriggers-l-shape"
+
+###  Python predicate specifying all Dirichlet grid vertices
+# x is the vertex coordinate
+parameterSet.dirichletVerticesPredicate = "[x[0] < 1, x[0] < 1, x[0] < 1]"
+parameterSet.dirichletRotationVerticesPredicate = "x[0] < 1"
+
+###  Python predicate specifying all Dirichlet grid vertices
+# x is the vertex coordinate
+parameterSet.neumannVerticesPredicate = "x[1] < -239"
+
+###  Neumann values, if needed
+parameterSet.neumannValues =  "0.09 0 0"
+
+# Initial deformation
+#parameterSet.initialDeformation = "[x[0], x[1], 0 if (x[0] < 225 or x[1] < -15) else 0.001*(x[0]-225)*(x[1]+15)]"
+##parameterSet.initialDeformation = "[x[0], x[1], 0]"
+
+parameterSet.startFromFile = True
+parameterSet.initialIterateGridFilename = "wriggers-L-shape_99_mm.msh"
+parameterSet.initialIterateFilename = "initial-wriggers-l-shape.vtu"
diff --git a/src/cosserat-continuum.cc b/src/cosserat-continuum.cc
index f29ef2dc979d52dcb3e92b630d1b1e075c4f8b7a..2b5e301cdbf5ca15f979f4819e3d551cde3442cf 100644
--- a/src/cosserat-continuum.cc
+++ b/src/cosserat-continuum.cc
@@ -127,7 +127,7 @@ int main (int argc, char *argv[]) try
 
   // Start Python interpreter
   Python::start();
-  Python::Reference main = Python::import("__main__");
+  auto pyMain = Python::main();
   Python::run("import math");
 
   //feenableexcept(FE_INVALID);
@@ -136,13 +136,12 @@ int main (int argc, char *argv[]) try
     << std::endl << "sys.path.append('" << argv[1] << "')"
     << std::endl;
 
-  using namespace TypeTree::Indices;
-  using SolutionType = TupleVector<std::vector<RealTuple<double,3> >,
-      std::vector<Rotation<double,3> > >;
-
   // parse data file
+  auto pyModule = pyMain.import(argv[2]);
+
+  // Get main parameter set
   ParameterTree parameterSet;
-  ParameterTreeParser::readINITree(argv[2], parameterSet);
+  pyModule.get("parameterSet").toC(parameterSet);
 
   ParameterTreeParser::readOptions(argc, argv, parameterSet);
 
@@ -164,6 +163,10 @@ int main (int argc, char *argv[]) try
   const bool adolcScalarMode            = parameterSet.get<bool>("adolcScalarMode", false);
   const std::string resultPath          = parameterSet.get("resultPath", "");
 
+  using namespace Dune::Indices;
+  using SolutionType = TupleVector<std::vector<RealTuple<double,3> >,
+      std::vector<Rotation<double,3> > >;
+
   // ///////////////////////////////////////
   //    Create the grid
   // ///////////////////////////////////////