diff --git a/mpf/_version.py b/mpf/_version.py
index 11d3ee171..d79f94544 100644
--- a/mpf/_version.py
+++ b/mpf/_version.py
@@ -10,7 +10,7 @@ PyPI.
 
 """
 
-__version__ = '0.50.0-dev.44'
+__version__ = '0.50.0-dev.43'
 '''The full version of MPF.'''
 
 __short_version__ = '0.50'
diff --git a/mpf/core/config_processor.py b/mpf/core/config_processor.py
index 95868ca8b..56b8ad0fc 100755
--- a/mpf/core/config_processor.py
+++ b/mpf/core/config_processor.py
@@ -26,6 +26,9 @@ class ConfigProcessor(object):
         if not ConfigValidator.config_spec:
             ConfigValidator.load_config_spec()
 
+        if not config:
+            return dict()
+
         for k in config.keys():
             try:
                 if config_type not in ConfigValidator.config_spec[k][
diff --git a/mpf/core/data_manager.py b/mpf/core/data_manager.py
index b06683d07..42f5a4f39 100644
--- a/mpf/core/data_manager.py
+++ b/mpf/core/data_manager.py
@@ -73,6 +73,9 @@ class DataManager(MpfController):
             self.debug_log("Didn't find the %s file. No prob. We'll create "
                            "it when we save.", self.name)
 
+        if not self.data:
+            self.data = {}
+
     def get_data(self, section=None):
         """Return the value of this DataManager's data.
 
diff --git a/mpf/core/machine.py b/mpf/core/machine.py
index ea4067514..b6e542940 100644
--- a/mpf/core/machine.py
+++ b/mpf/core/machine.py
@@ -698,8 +698,7 @@ class MachineController(LogMixin):
         self.info_log("Starting the main run loop.")
         try:
             init = Util.ensure_future(self.initialise(), loop=self.clock.loop)
-            self.clock.loop.run_until_complete(Util.first([init, self.stop_future], cancel_others=False,
-                                                          loop=self.clock.loop))
+            self.clock.loop.run_until_complete(Util.first([init, self.stop_future], loop=self.clock.loop))
         except RuntimeError:
             # do not show a runtime useless runtime error
             self.error_log("Failed to initialise MPF")
diff --git a/mpf/file_interfaces/yaml_interface.py b/mpf/file_interfaces/yaml_interface.py
index 4be0ba59c..e68a4b31d 100644
--- a/mpf/file_interfaces/yaml_interface.py
+++ b/mpf/file_interfaces/yaml_interface.py
@@ -275,7 +275,7 @@ class YamlInterface(FileInterface):
     @staticmethod
     def process(data_string: Iterable[str]) -> dict:
         """Parse yaml from a string."""
-        return Util.keys_to_lower(yaml.load(data_string, Loader=MpfLoader))
+        return yaml.load(data_string, Loader=MpfLoader)
 
     def save(self, filename: str, data: dict) -> None:   # pragma: no cover
         """Save config to yaml file."""

String placeholders are lower cased. Support uppercase strings
Fix and test
diff --git a/mpf/tests/machine_files/config_interface/config/test_config_interface.yaml b/mpf/tests/machine_files/config_interface/config/test_config_interface.yaml
index f5a729241..20966a09a 100644
--- a/mpf/tests/machine_files/config_interface/config/test_config_interface.yaml
+++ b/mpf/tests/machine_files/config_interface/config/test_config_interface.yaml
@@ -26,6 +26,3 @@ test_section:
   case_sensitive_1: test
   Case_sensitive_2: test
   case_sensitive_3: Test
-
-Test_section_1:
-  test: test
diff --git a/mpf/tests/machine_files/p_roc/config/config.yaml b/mpf/tests/machine_files/p_roc/config/config.yaml
index 3e718b0f0..c35357873 100644
--- a/mpf/tests/machine_files/p_roc/config/config.yaml
+++ b/mpf/tests/machine_files/p_roc/config/config.yaml
@@ -4,7 +4,7 @@ hardware:
     driverboards: pdb
     platform: p_roc
 
-P_ROC:
+p_roc:
   dmd_timing_cycles: 1, 2, 3, 4
 
 switches:
diff --git a/mpf/tests/machine_files/shows/config/test_shows.yaml b/mpf/tests/machine_files/shows/config/test_shows.yaml
index f6235c992..c17e8c680 100644
--- a/mpf/tests/machine_files/shows/config/test_shows.yaml
+++ b/mpf/tests/machine_files/shows/config/test_shows.yaml
@@ -171,8 +171,8 @@ show_player:
     show_assoc_tokens:
       speed: 1
       show_tokens:
-         line1Num: tag1
-         line1Color: red
+         line1num: tag1
+         line1color: red
   stop_show_assoc_tokens:
     show_assoc_tokens:
       action: stop
diff --git a/mpf/tests/test_Config.py b/mpf/tests/test_Config.py
index 97014c7b1..9246105be 100644
--- a/mpf/tests/test_Config.py
+++ b/mpf/tests/test_Config.py
@@ -14,8 +14,6 @@ class TestConfig(MpfTestCase):
 
         self.add_to_config_validator('test_section',
                                      dict(__valid_in__='machine'))
-        self.add_to_config_validator('test_section_1',
-                                     dict(__valid_in__='machine'))
 
         super().setUp()
 
@@ -49,19 +47,16 @@ class TestConfig(MpfTestCase):
         self.assertEqual('+5', self.machine.config['test_section']['str_plus5'])
         self.assertEqual('+0.5', self.machine.config['test_section']['str_plus0point5'])
 
-        # keys should be all lowercase
+        # keys should keep case
         self.assertIn('case_sensitive_1', self.machine.config['test_section'])
-        self.assertIn('case_sensitive_2', self.machine.config['test_section'])
+        self.assertIn('Case_sensitive_2', self.machine.config['test_section'])
         self.assertIn('case_sensitive_3', self.machine.config['test_section'])
 
         # values should be case sensitive
         self.assertEqual(self.machine.config['test_section']['case_sensitive_1'], 'test')
-        self.assertEqual(self.machine.config['test_section']['case_sensitive_2'], 'test')
+        self.assertEqual(self.machine.config['test_section']['Case_sensitive_2'], 'test')
         self.assertEqual(self.machine.config['test_section']['case_sensitive_3'], 'Test')
 
-        # key should be lowercase even though it's uppercase in the config
-        self.assertIn('test_section_1', self.machine.config)
-
     def test_config_validator(self):
         validation_failure_info = (("key", "entry"), "subkey")
         # test config spec syntax error

pip install -e .
parse_log_pytest
pytest
pytest
apt-get update apt-get install -y gcc pip install -U pip setuptools pip install Cython==0.24.1
3.6
pytest --no-header -rA --tb=line --color=no -p no:cacheprovider -W ignore::DeprecationWarning
asciimatics==1.14.0
attrs @ file:///opt/conda/conda-bld/attrs_1642510447205/work
certifi==2021.5.30
Cython==0.24.1
future==1.0.0
importlib-metadata @ file:///tmp/build/80754af9/importlib-metadata_1631916693255/work
iniconfig @ file:///home/linux1/recipes/ci/iniconfig_1610983019677/work
more-itertools @ file:///tmp/build/80754af9/more-itertools_1637733554872/work
-e git+https://github.com/missionpinball/mpf.git@6ba39ef0491365f87da0a9bc28ab541a600bc7f4#egg=mpf
packaging @ file:///tmp/build/80754af9/packaging_1637314298585/work
Pillow==8.4.0
pluggy @ file:///tmp/build/80754af9/pluggy_1615976315926/work
psutil==7.0.0
py @ file:///opt/conda/conda-bld/py_1644396412707/work
pyfiglet==0.8.post1
pyparsing @ file:///tmp/build/80754af9/pyparsing_1635766073266/work
pyserial==3.5
pyserial-asyncio==0.6
pytest==6.2.4
ruamel.base==1.0.0
ruamel.yaml==0.10.23
toml @ file:///tmp/build/80754af9/toml_1616166611790/work
typing==3.7.4.3
typing_extensions @ file:///opt/conda/conda-bld/typing_extensions_1647553014482/work
wcwidth==0.2.13
zipp @ file:///tmp/build/80754af9/zipp_1633618647012/work

name: mpf
channels:
  - defaults
  - https://repo.anaconda.com/pkgs/main
  - https://repo.anaconda.com/pkgs/r
  - conda-forge
dependencies:
  - _libgcc_mutex=0.1=main
  - _openmp_mutex=5.1=1_gnu
  - attrs=21.4.0=pyhd3eb1b0_0
  - ca-certificates=2025.2.25=h06a4308_0
  - certifi=2021.5.30=py36h06a4308_0
  - importlib-metadata=4.8.1=py36h06a4308_0
  - importlib_metadata=4.8.1=hd3eb1b0_0
  - iniconfig=1.1.1=pyhd3eb1b0_0
  - ld_impl_linux-64=2.40=h12ee557_0
  - libffi=3.3=he6710b0_2
  - libgcc-ng=11.2.0=h1234567_1
  - libgomp=11.2.0=h1234567_1
  - libstdcxx-ng=11.2.0=h1234567_1
  - more-itertools=8.12.0=pyhd3eb1b0_0
  - ncurses=6.4=h6a678d5_0
  - openssl=1.1.1w=h7f8727e_0
  - packaging=21.3=pyhd3eb1b0_0
  - pluggy=0.13.1=py36h06a4308_0
  - py=1.11.0=pyhd3eb1b0_0
  - pyparsing=3.0.4=pyhd3eb1b0_0
  - pytest=6.2.4=py36h06a4308_2
  - python=3.6.13=h12debd9_1
  - readline=8.2=h5eee18b_0
  - sqlite=3.45.3=h5eee18b_0
  - tk=8.6.14=h39e8969_0
  - toml=0.10.2=pyhd3eb1b0_0
  - typing_extensions=4.1.1=pyh06a4308_0
  - wheel=0.37.1=pyhd3eb1b0_0
  - xz=5.6.4=h5eee18b_1
  - zipp=3.6.0=pyhd3eb1b0_0
  - zlib=1.2.13=h5eee18b_1
  - pip:
      - asciimatics==1.14.0
      - cython==0.24.1
      - future==1.0.0
      - pillow==8.4.0
      - pip==21.3.1
      - psutil==7.0.0
      - pyfiglet==0.8.post1
      - pyserial==3.5
      - pyserial-asyncio==0.6
      - ruamel-base==1.0.0
      - ruamel-yaml==0.10.23
      - setuptools==59.6.0
      - typing==3.7.4.3
      - wcwidth==0.2.13
prefix: /opt/conda/envs/mpf

mpf/tests/test_Config.py::TestConfig::test_config_file
mpf/tests/test_Config.py::TestConfig::test_config_merge mpf/tests/test_Config.py::TestConfig::test_config_validator
mpf/file_interfaces/yaml_interface.py mpf/core/config_processor.py mpf/_version.py mpf/core/data_manager.py mpf/core/machine.py
mpf/file_interfaces/yaml_interface.py mpf/core/config_processor.py mpf/_version.py mpf/core/data_manager.py mpf/core/machine.py