diff --git a/src/pystencilssfg/emission/file_printer.py b/src/pystencilssfg/emission/file_printer.py
index 8216a7b1923b8b23e19a4fbece8d507aa6260d27..6ab98eb89aba143dd567fc0c176199ff9d1444fe 100644
--- a/src/pystencilssfg/emission/file_printer.py
+++ b/src/pystencilssfg/emission/file_printer.py
@@ -154,7 +154,10 @@ class SfgFilePrinter:
                 return code
 
             case SfgClassBody(cls, vblocks):
-                code = f"{cls.class_keyword} {cls.name} {{\n"
+                code = f"{cls.class_keyword} {cls.name}"
+                if cls.base_classes:
+                    code += " : " + ", ".join(cls.base_classes)
+                code += " {\n"
                 vblocks_str = [self._visibility_block(b) for b in vblocks]
                 code += "\n\n".join(vblocks_str)
                 code += "\n};\n"
diff --git a/tests/generator_scripts/source/SimpleClasses.harness.cpp b/tests/generator_scripts/source/SimpleClasses.harness.cpp
index ecfc065f2fc27423403dab1c0b03200af766a4d7..176f05e55d47f31b6100027e9ad1b87b4e5e63c9 100644
--- a/tests/generator_scripts/source/SimpleClasses.harness.cpp
+++ b/tests/generator_scripts/source/SimpleClasses.harness.cpp
@@ -7,4 +7,7 @@ int main(void){
     Point p { 3, 1, -4 };
 
     assert(p.getX() == 3);
+
+    SpecialPoint q { 0, 1, 2 };
+    assert(q.getY() == 1);
 }
diff --git a/tests/generator_scripts/source/SimpleClasses.py b/tests/generator_scripts/source/SimpleClasses.py
index 454f1a26f8103f7c8b330f1a5b70b1b79f96ebbc..26502f0e149c11d470e700269f5ff526aff3ce85 100644
--- a/tests/generator_scripts/source/SimpleClasses.py
+++ b/tests/generator_scripts/source/SimpleClasses.py
@@ -11,18 +11,19 @@ with SourceFileGenerator() as sfg:
 
     sfg.klass("Point")(
         sfg.public(
-            sfg.constructor(x, y, z)
-            .init(x_)(x)
-            .init(y_)(y)
-            .init(z_)(z),
-
+            sfg.constructor(x, y, z).init(x_)(x).init(y_)(y).init(z_)(z),
             sfg.method("getX", returns="const int64_t", const=True, inline=True)(
                 "return this->x_;"
-            )
+            ),
         ),
-        sfg.private(
-            x_,
-            y_,
-            z_
+        sfg.protected(x_, y_, z_),
+    )
+
+    sfg.klass("SpecialPoint", bases=["public Point"])(
+        sfg.public(
+            "using Point::Point;",
+            sfg.method("getY", returns="const int64_t", const=True, inline=True)(
+                "return this->y_;"
+            ),
         )
     )