diff --git a/phasefield/analytical.py b/phasefield/analytical.py
index 93a6234a898ed36aa1cc3c1ff4b30bef9f6da6df..c38469dd19e8c75b4d01bf35147d358686aafce2 100644
--- a/phasefield/analytical.py
+++ b/phasefield/analytical.py
@@ -1,7 +1,5 @@
 import sympy as sp
 from collections import defaultdict
-from functools import partial
-
 from pystencils.sympyextensions import multidimensional_sum as multi_sum, normalize_product, prod
 from pystencils.fd import functional_derivative, expand_diff_linear, Diff, expand_diff_full
 
diff --git a/phasefield/scenarios.py b/phasefield/scenarios.py
index 955be13e013a27eee928e4a448bbc5f6fc030424..f8d9df1ff3455d83fef42311f45a0dac625a9396 100644
--- a/phasefield/scenarios.py
+++ b/phasefield/scenarios.py
@@ -1,5 +1,6 @@
 import sympy as sp
 import numpy as np
+import warnings
 from lbmpy.phasefield.phasefieldstep import PhaseFieldStep
 from lbmpy.phasefield.analytical import free_energy_functional_3_phases, free_energy_functional_n_phases, \
     symbolic_order_parameters, free_energy_functional_n_phases_penalty_term
@@ -49,7 +50,32 @@ def create_n_phase_model(alpha=1, num_phases=4,
     free_energy = free_energy_functional_n_phases(num_phases, surface_tensions, alpha,
                                                   order_parameters, f1=f1, f2=f2,
                                                   triple_point_energy=triple_point_energy)
-    return PhaseFieldStep(free_energy, order_parameters, **kwargs)
+
+    def concentration_to_order_parameters(c):
+        c = np.array(c)
+        c_sum = np.sum(c, axis=-1)
+        if isinstance(c_sum, np.ndarray):
+            np.subtract(c_sum, 1, out=c_sum)
+            np.abs(c_sum, out=c_sum)
+            deviation = np.max(c_sum)
+        else:
+            deviation = np.abs(c_sum - 1)
+        if deviation > 1e-5:
+            warnings.warn("Initialization problem: concentrations have to add up to 1")
+        return c[..., :-1]
+
+    def order_parameters_to_concentrations(op):
+        op_shape = list(op.shape)
+        op_shape[-1] += 1
+        result = np.empty(op_shape)
+        np.copyto(result[..., :-1], op)
+        result[..., -1] = 1 - np.sum(op, axis=-1)
+        return result
+
+    return PhaseFieldStep(free_energy, order_parameters,
+                          concentration_to_order_parameters=concentration_to_order_parameters,
+                          order_parameters_to_concentrations=order_parameters_to_concentrations,
+                          **kwargs)
 
 
 def create_n_phase_model_penalty_term(alpha=1, num_phases=4, kappa=0.015, penalty_term_factor=0.01, **kwargs):
diff --git a/plot2d.py b/plot2d.py
index e4dee9e5ba12089b321acaa32793dd0aac0237c8..13bd5eec91b2b9c4b5a8209956247a1abbc882f9 100644
--- a/plot2d.py
+++ b/plot2d.py
@@ -76,11 +76,13 @@ def phase_plot(phase_field: np.ndarray, linewidth=1.0, clip=True) -> None:
 
     assert len(phase_field.shape) == 3
 
-    for i in range(phase_field.shape[-1]):
-        scalar_field_alpha_value(phase_field[..., i], next(color_cycle), clip=clip, interpolation='bilinear')
-    if linewidth:
+    with warnings.catch_warnings():
+        warnings.simplefilter("ignore", lineno=1230)
         for i in range(phase_field.shape[-1]):
-            scalar_field_contour(phase_field[..., i], levels=[0.5], colors='k', linewidths=[linewidth])
+            scalar_field_alpha_value(phase_field[..., i], next(color_cycle), clip=clip, interpolation='bilinear')
+        if linewidth:
+            for i in range(phase_field.shape[-1]):
+                scalar_field_contour(phase_field[..., i], levels=[0.5], colors='k', linewidths=[linewidth])
 
 
 def phase_plot_for_step(phase_field_step, slice_obj=make_slice[:, :], **kwargs):