diff --git a/examples/example/main.py b/examples/example/main.py
index 029077ca710c55471f324617610b2f50e2ae9575..7875e909993c5220a5af10c6b5f372af1ba20fa8 100644
--- a/examples/example/main.py
+++ b/examples/example/main.py
@@ -10,7 +10,6 @@ from ApplicationConfig import ApplicationConfig
 
 
 if __name__ == "__main__":
-    app = QApplication(sys.argv)
 
     # setup the logging module+
     logging.basicConfig(level=logging.DEBUG)
@@ -19,48 +18,4 @@ if __name__ == "__main__":
     config.module_log_enabled = True
     config.module_log_level = logging.DEBUG
 
-    #config.load('./configs/ApplicationConfig.yaml')
-    #config.autosave(enable=True, path='./')
-    # print(config.wafer_version)
-    # config.wafer_version.get()
-    # config.wafer_number.get()
-    # print(config.wafer_version)
-
-    window = QMainWindow()
-    wdg = QWidget()
-    grd = QtWidgets.QGridLayout()
-    wdg.setLayout(grd)
-    grd.addWidget(config.view.widget(), 0, 0)
-    # grd.addWidget(config.view.widget(), 1, 0)
-
-    tree = QTreeWidget()
-
-    tree.setColumnCount(3)
-    tree.setHeaderLabels(["Name", "Type", "asdf"])
-    tree.addTopLevelItem(config.view.ui_tree_widget_item(tree))
-    grd.addWidget(tree, 2, 0)
-
-    btn_set = QtWidgets.QPushButton("Set Wafer Number to 5")
-    btn_set.clicked.connect(lambda: config.wafer_number.set("5"))
-    grd.addWidget(btn_set, 3, 0)
-
-    btn_save = QtWidgets.QPushButton("Save Config")
-    #btn_save.clicked.connect(lambda: config.save('./configs/ApplicationConfig.yaml'))
-    grd.addWidget(btn_save, 4, 0)
-
-    # Add a new combo box
-    combo = QtWidgets.QComboBox()
-    grd.addWidget(combo, 5, 0)
-   # config.wafer_list1.view.add_new_view(combo)
-
-   # config.wafer_list1.connect(test)
-
-    window.setCentralWidget(wdg)
-    # print(config.load('config.yaml'))
-
-    window.show()
-
-    sys.exit(app.exec())
-    # config.wafer_nr = "1234"
-
     # config.save("test.yaml")
diff --git a/examples/example3/ApplicationConfig.py b/examples/example3/ApplicationConfig.py
new file mode 100644
index 0000000000000000000000000000000000000000..480a53fc70f4cd401a4f9a406f7d8dd6d9df840e
--- /dev/null
+++ b/examples/example3/ApplicationConfig.py
@@ -0,0 +1,39 @@
+import logging
+import sys
+from pathlib import Path
+import confighandler as cfg
+from confighandler.controller.SelectableList import SelectableList
+from LaserConfig import LaserConfig
+
+
+class ApplicationConfig(cfg.ConfigNode):
+
+    def __init__(self) -> None:
+        super().__init__()
+
+        self.output_directory: cfg.Field[Path] = cfg.Field(Path("../../tests/t_{wafer_number}"))
+
+        self.wafer_version: cfg.Field[str] = cfg.Field("v1.0",
+                                                       friendly_name="wafer_version",
+                                                       description="The version of the wafer")
+
+        self.wafer_number: cfg.Field[int] = cfg.Field(1,
+                                                      friendly_name="wafer_number",
+                                                      description="The version of the wafer")
+
+        self.check: cfg.Field[bool] = cfg.Field(False, friendly_name="testcheck",
+                                                description="Testcheck")
+
+        self.wafer_nr: cfg.Field[str] = cfg.Field("12345ABCD_{wafer_number}",
+                                                  friendly_name="wafer_nr",
+                                                  description="The version of the wafer")
+
+        self.wafer_number2: cfg.Field[tuple] = cfg.Field((1, 2),
+                                                         friendly_name="wafer_number2",
+                                                         description="The version of the wafer")
+
+        self.wafer_list: cfg.Field[list] = cfg.Field([1, 2],
+                                                     friendly_name="wafer_list",
+                                                     description="The version of the wafer")
+
+        self.register()
diff --git a/examples/example3/LaserConfig.py b/examples/example3/LaserConfig.py
new file mode 100644
index 0000000000000000000000000000000000000000..3d1956b2659f8c0e5615ee55edec775878637c55
--- /dev/null
+++ b/examples/example3/LaserConfig.py
@@ -0,0 +1,14 @@
+import confighandler as cfg
+
+
+class LaserConfig(cfg.ConfigNode):
+
+    def __init__(self, internal_log, internal_log_level) -> None:
+        super().__init__(internal_log=internal_log, internal_log_level=internal_log_level)
+        self.wavelength_range = cfg.Field(850)
+        self.velocity = cfg.Field(2.0)
+        self.acceleration = cfg.Field(1.0)
+        self.deceleration = cfg.Field(1.0)
+        self.port = cfg.Field("USB 0")
+
+        self.register()
diff --git a/examples/example3/main.py b/examples/example3/main.py
new file mode 100644
index 0000000000000000000000000000000000000000..029077ca710c55471f324617610b2f50e2ae9575
--- /dev/null
+++ b/examples/example3/main.py
@@ -0,0 +1,66 @@
+import logging
+import sys
+sys.path.append('../../src')
+import time
+
+from PySide6 import QtWidgets
+from PySide6.QtCore import Signal, QObject
+from PySide6.QtWidgets import QApplication, QMainWindow, QWidget, QTreeWidget
+from ApplicationConfig import ApplicationConfig
+
+
+if __name__ == "__main__":
+    app = QApplication(sys.argv)
+
+    # setup the logging module+
+    logging.basicConfig(level=logging.DEBUG)
+
+    config = ApplicationConfig()
+    config.module_log_enabled = True
+    config.module_log_level = logging.DEBUG
+
+    #config.load('./configs/ApplicationConfig.yaml')
+    #config.autosave(enable=True, path='./')
+    # print(config.wafer_version)
+    # config.wafer_version.get()
+    # config.wafer_number.get()
+    # print(config.wafer_version)
+
+    window = QMainWindow()
+    wdg = QWidget()
+    grd = QtWidgets.QGridLayout()
+    wdg.setLayout(grd)
+    grd.addWidget(config.view.widget(), 0, 0)
+    # grd.addWidget(config.view.widget(), 1, 0)
+
+    tree = QTreeWidget()
+
+    tree.setColumnCount(3)
+    tree.setHeaderLabels(["Name", "Type", "asdf"])
+    tree.addTopLevelItem(config.view.ui_tree_widget_item(tree))
+    grd.addWidget(tree, 2, 0)
+
+    btn_set = QtWidgets.QPushButton("Set Wafer Number to 5")
+    btn_set.clicked.connect(lambda: config.wafer_number.set("5"))
+    grd.addWidget(btn_set, 3, 0)
+
+    btn_save = QtWidgets.QPushButton("Save Config")
+    #btn_save.clicked.connect(lambda: config.save('./configs/ApplicationConfig.yaml'))
+    grd.addWidget(btn_save, 4, 0)
+
+    # Add a new combo box
+    combo = QtWidgets.QComboBox()
+    grd.addWidget(combo, 5, 0)
+   # config.wafer_list1.view.add_new_view(combo)
+
+   # config.wafer_list1.connect(test)
+
+    window.setCentralWidget(wdg)
+    # print(config.load('config.yaml'))
+
+    window.show()
+
+    sys.exit(app.exec())
+    # config.wafer_nr = "1234"
+
+    # config.save("test.yaml")
diff --git a/src/confighandler/controller/Field.py b/src/confighandler/controller/Field.py
index ace8d1f1b82fc0b1c9029723d4d5796eb9a4fbbd..a2ae326239f3a6ec3ea10be0db2c85c72da425d6 100644
--- a/src/confighandler/controller/Field.py
+++ b/src/confighandler/controller/Field.py
@@ -8,9 +8,12 @@ Description:
 
 import logging
 import re
+from abc import abstractmethod
 from pathlib import Path
 from typing import Generic, T, TypeVar
 
+from PySide6.QtWidgets import QApplication
+
 import confighandler
 from confighandler.controller.CObject import CObject
 from confighandler.controller.CSignal import CSignal
@@ -45,13 +48,19 @@ class Field(Generic[T], CObject):
         self.keywords = {}
 
         # The view, usd for handling the UI
-        self.view = FieldView(self)
-
+        if QApplication.instance() is not None:
+            self.view = self.create_view()
+        else:
+            self.view = None
         # Connected properties that should bet set if the field changes
         self.props = []
 
         self._module_logger.debug(f"Field {self.field_name} created with value {value} of type {type(value)}")
 
+    @abstractmethod
+    def create_view(self):
+        return FieldView(self)
+
     def __new__(cls, value, friendly_name: str = None, description: str = None):
         # print(f"Field {cls.__name__} created with value {value} of type {type(value)} -> {isinstance(value, int)}")
         if isinstance(value, str):
@@ -188,7 +197,6 @@ class Field(Generic[T], CObject):
         if self._allowed_types is None:
             raise TypeError(f"No allowed types for {self.__class__.__name__}")
 
-
         if not isinstance(self._allowed_types, tuple) or len(self._allowed_types) < 2:
             raise TypeError(f"Allowed types not defined correctly for {self.__class__.__name__}")
 
@@ -209,7 +217,8 @@ class Field(Generic[T], CObject):
 
         # No valid type has been found
         if not type_allowed:
-            raise TypeError(f"Value for field {self.field_name} must be of type {self._allowed_types[0]}, not {type(value)}")
+            raise TypeError(
+                f"Value for field {self.field_name} must be of type {self._allowed_types[0]}, not {type(value)}")
         else:
             # Valid type found, convert to first arg
             value = self._allowed_types[0](value)
@@ -244,7 +253,8 @@ class Field(Generic[T], CObject):
 
     def _on_keyword_changed(self):
         self.set(self._value_to_emit)
-        self.view.value_changed.emit(self._value_to_emit)
+        if self.view is not None:
+            self.view.value_changed.emit(self._value_to_emit)
 
     def _yaml_repr(self):
         raise NotImplementedError()
diff --git a/src/confighandler/controller/fields/FieldBool.py b/src/confighandler/controller/fields/FieldBool.py
index 4817fab1e29e54fbc127aea80318e57d54428f4f..eb5e57f057544ec8f3f09447600ec51a9bd7f14b 100644
--- a/src/confighandler/controller/fields/FieldBool.py
+++ b/src/confighandler/controller/fields/FieldBool.py
@@ -13,8 +13,10 @@ from confighandler.view.fields.FieldViewBool import FieldViewBool
 class FieldBool(Field):
     def __init__(self, value: bool, friendly_name: str = None, description: str = None):
         super().__init__(value, friendly_name, description)
-        self.view = FieldViewBool(self)
         self._allowed_types = (bool, [int])
 
+    def create_view(self):
+        return FieldViewBool(self)
+
     def _yaml_repr(self):
         return bool(self.value)
diff --git a/src/confighandler/controller/fields/FieldFloat.py b/src/confighandler/controller/fields/FieldFloat.py
index d9dc772ea813a3e2df3b80973ff5756be8eebeeb..4b82fbedc9a56833678ee6d4e13aeecd9eb16ba1 100644
--- a/src/confighandler/controller/fields/FieldFloat.py
+++ b/src/confighandler/controller/fields/FieldFloat.py
@@ -13,8 +13,10 @@ from confighandler.view.fields.FieldViewFloat import FieldViewFloat
 class FieldFloat(Field):
     def __init__(self, value: float, friendly_name: str = None, description: str = None):
         super().__init__(value, friendly_name, description)
-        self.view = FieldViewFloat(self)
         self._allowed_types = (int, [float])
 
+    def create_view(self):
+        return FieldViewFloat(self)
+
     def _yaml_repr(self):
         return float(self.value)
diff --git a/src/confighandler/controller/fields/FieldInt.py b/src/confighandler/controller/fields/FieldInt.py
index e9824ee5dc9bcba04853a14fb803f2151c830684..2309f47fea2633c236448e1c2d644b0bed01747b 100644
--- a/src/confighandler/controller/fields/FieldInt.py
+++ b/src/confighandler/controller/fields/FieldInt.py
@@ -13,8 +13,10 @@ from confighandler.view.fields.FieldViewInt import FieldViewInt
 class FieldInt(Field):
     def __init__(self, value: int, friendly_name: str = None, description: str = None):
         super().__init__(value, friendly_name, description)
-        self.view = FieldViewInt(self)
         self._allowed_types = (int, None)
 
+    def create_view(self):
+        return FieldViewInt(self)
+
     def _yaml_repr(self):
         return int(self.value)
diff --git a/src/confighandler/controller/fields/FieldList.py b/src/confighandler/controller/fields/FieldList.py
index b97c44287a5e72c949b33e284e0e015a736d8f7c..07e03eed13f083f3fdfaa468ea3871a28f9000fc 100644
--- a/src/confighandler/controller/fields/FieldList.py
+++ b/src/confighandler/controller/fields/FieldList.py
@@ -13,8 +13,11 @@ from confighandler.view.fields.FieldViewList import FieldViewList
 class FieldList(Field):
     def __init__(self, value: tuple, friendly_name: str = None, description: str = None):
         super().__init__(value, friendly_name, description)
-        self.view = FieldViewList(self)
+
         self._allowed_types = (list, [tuple])
 
+    def create_view(self):
+        return FieldViewList(self)
+
     def _yaml_repr(self):
         return str(self.value)
diff --git a/src/confighandler/controller/fields/FieldPath.py b/src/confighandler/controller/fields/FieldPath.py
index 2c8552b1c0137b69f98e2ba907fef385a6e7fcdc..0ce98c920ac1ff2384edec3d921a0d22b45b827c 100644
--- a/src/confighandler/controller/fields/FieldPath.py
+++ b/src/confighandler/controller/fields/FieldPath.py
@@ -19,14 +19,13 @@ class FieldPath(Field):
 
     def __init__(self, value: str, friendly_name: str = None, description: str = None):
         super().__init__(value, friendly_name, description)
-        # self._value_replaced_keywords = self.replace_keywords(self.value)
-        self.view = FieldViewPath(self)
         self._input = self.value
         self._allowed_types = (Path, [pathlib.PurePosixPath, pathlib.PurePath,
                                       pathlib.PureWindowsPath,
                                       str])
-        # self.ui_btn_opens = []
 
+    def create_view(self):
+        return FieldViewPath(self)
     # ==================================================================================================================
     # Getter and Setter for value retrival
     # ==================================================================================================================
diff --git a/src/confighandler/controller/fields/FieldSelectableList.py b/src/confighandler/controller/fields/FieldSelectableList.py
index 984f9272002077cd13f8440bb82a71a32cebd8af..138ada01a304c29a9325d1984b41338397c7f9bd 100644
--- a/src/confighandler/controller/fields/FieldSelectableList.py
+++ b/src/confighandler/controller/fields/FieldSelectableList.py
@@ -14,9 +14,12 @@ import confighandler as ch
 class FieldSelectableList(ch.Field):
     def __init__(self, value: ch.SelectableList, friendly_name: str = None, description: str = None):
         super().__init__(value, friendly_name, description)
-        self.view = ch.FieldViewSelectableList(self)
+
         self._allowed_types = (int, None)
 
+    def create_view(self):
+        return ch.FieldViewSelectableList(self)
+
     def get_list(self) -> list:
         return list(self._value)
 
diff --git a/src/confighandler/controller/fields/FieldString.py b/src/confighandler/controller/fields/FieldString.py
index 84a4e1cdd22e0187043915f10db9befc4ee44318..2738a537b6f9cff11bb5a5a5edba57b7bf313a0f 100644
--- a/src/confighandler/controller/fields/FieldString.py
+++ b/src/confighandler/controller/fields/FieldString.py
@@ -14,8 +14,11 @@ class FieldString(Field):
     def __init__(self, value, friendly_name: str = None, description: str = None):
         super().__init__(value, friendly_name, description)
         self._value_replaced_keywords = self.replace_keywords(self.value)
-        self.view = FieldViewString(self)
+
         self._allowed_types = (str, [])
 
+    def create_view(self):
+        return FieldViewString(self)
+
     def _yaml_repr(self):
         return f"\"{self.value}\""
diff --git a/src/confighandler/controller/fields/FieldTuple.py b/src/confighandler/controller/fields/FieldTuple.py
index b5d0803806e9332fa7527ae261877c1275df8833..a31f1487d6dd9f0bb1f5da8d6f7d2bfa3fd7bf18 100644
--- a/src/confighandler/controller/fields/FieldTuple.py
+++ b/src/confighandler/controller/fields/FieldTuple.py
@@ -13,9 +13,12 @@ from confighandler.view.fields.FieldViewTuple import FieldViewTuple
 class FieldTuple(Field):
     def __init__(self, value: tuple, friendly_name: str = None, description: str = None):
         super().__init__(value, friendly_name, description)
-        self.view = FieldViewTuple(self)
+
         self._allowed_types = (tuple, None)
 
+    def create_view(self):
+        return FieldViewTuple(self)
+
     def _yaml_repr(self):
         return str(self.value)