diff --git a/omflut/coupling.py b/omflut/coupling.py
index 37a8a1021ca3d72d03f46c62aa59e2a1ee0ef7e4..b20da766bc4ac6e3a40b80a0339b23d5bb91ef91 100644
--- a/omflut/coupling.py
+++ b/omflut/coupling.py
@@ -24,10 +24,18 @@ class FlutterGroup(om.Group):
         self.options.declare('xfer', desc='interpolator', recordable=False)
         self.options.declare('aero', desc='aerodynamic solver', recordable=False)
         self.options.declare('flutter', desc='flutter solver', recordable=False)
+        self.options.declare('geo', desc='optional geometry parametrization', default=None, recordable=False)
 
     def setup(self):
-        self.add_subsystem('mesh_struct', self.options['struct'].get_mesh(), promotes=['x_struct0'])
-        self.add_subsystem('mesh_aero', self.options['aero'].get_mesh(), promotes=['x_aero0'])
+        if self.options['geo'] is None:
+            self.add_subsystem('mesh_struct', self.options['struct'].get_mesh(), promotes=['x_struct0'])
+            self.add_subsystem('mesh_aero', self.options['aero'].get_mesh(), promotes=['x_aero0'])
+        else:
+            self.add_subsystem('mesh_struct', self.options['struct'].get_mesh())
+            self.add_subsystem('mesh_aero', self.options['aero'].get_mesh())
+            self.add_subsystem('geometry', self.options['geo'].get_mesh(), promotes=['x_struct0', 'x_aero0'])
+            self.connect('mesh_struct.x_struct0', 'geometry.x_struct_in')
+            self.connect('mesh_aero.x_aero0', 'geometry.x_aero_in')
         self.add_subsystem('struct', self.options['struct'].get_solver(self.name), promotes=['x_struct0', 'q_struct', 'M', 'K'])
         self.add_subsystem('xfer', self.options['xfer'].get_solver(self.name), promotes=['x_struct0', 'q_struct', 'x_aero0', 'q_aero'])
         self.add_subsystem('aero', self.options['aero'].get_solver(self.name), promotes=['x_aero0', 'q_aero', 'Q_re', 'Q_im'])