         if (howManyInnerLoopsMacroHas > 0) {
           // This is where inner loop logic goes (???)
           Serial.println("This macro has inner loops");
-          if (macro_loop_metadata[macroMetadataIndex][1] > 0 && macro_loop_metadata[macroMetadataIndex][3] > 0) {
+          if (inner_loop_metadata[macroMetadataIndex][1] > 0 && inner_loop_metadata[macroMetadataIndex][3] > 0) {
             // Do something
             Serial.println("This inner loop metadata is valid");
             Serial.print("A currentMacroIndexRunning  = ");
             Serial.println(currentMacroIndexRunning);
-            if (macro_loop_metadata[macroMetadataIndex][3] > 0 && macro_loop_metadata[macroMetadataIndex][4] <= macro_loop_metadata[macroMetadataIndex][3]) {
+            if (inner_loop_metadata[macroMetadataIndex][3] > 0 && inner_loop_metadata[macroMetadataIndex][4] <= inner_loop_metadata[macroMetadataIndex][3]) {
               Serial.println("TEST");
-              if (macro_loop_metadata[macroMetadataIndex][2] < macro_loop_metadata[macroMetadataIndex][6]) {
+              if (inner_loop_metadata[macroMetadataIndex][2] < inner_loop_metadata[macroMetadataIndex][6]) {
                 // Current input index is lower than starting index, fix this
+                // Write inner loop metadata back to PC here
                 Serial.println("Current input index for current inner loop is below what it is supposed to be, fix that!");
                 Serial.print("B currentMacroIndexRunning  = ");
                 Serial.println(currentMacroIndexRunning);
-                macro_loop_metadata[macroMetadataIndex][2] = macro_loop_metadata[macroMetadataIndex][6];
-                currentMacroIndexRunning = macro_loop_metadata[macroMetadataIndex][6];
+                inner_loop_metadata[macroMetadataIndex][2] = inner_loop_metadata[macroMetadataIndex][6];
+                currentMacroIndexRunning = inner_loop_metadata[macroMetadataIndex][6];
                 Serial.print("C currentMacroIndexRunning  = ");
                 Serial.println(currentMacroIndexRunning);
+                // Write inner loop metadata back to PC here
               }
-              if (macro_loop_metadata[macroMetadataIndex][2] >= macro_loop_metadata[macroMetadataIndex][6] && currentMacroIndexRunning <= macro_loop_metadata[macroMetadataIndex][7]) {
-                // Current input index is lower than starting index, fix this
+              if (inner_loop_metadata[macroMetadataIndex][2] >= inner_loop_metadata[macroMetadataIndex][6] && currentMacroIndexRunning <= inner_loop_metadata[macroMetadataIndex][7]) {
+                // Current input index is valid
+                // Write inner loop metadata back to PC here
                 Serial.println("Current input index for current inner loop is in the valid range!");
                 Serial.print("D currentMacroIndexRunning  = ");
                 Serial.println(currentMacroIndexRunning);
                 currentMacroIndexRunning++;
-                macro_loop_metadata[macroMetadataIndex][2]++;
+                inner_loop_metadata[macroMetadataIndex][2]++;
                 Serial.print("E currentMacroIndexRunning  = ");
                 Serial.println(currentMacroIndexRunning);
+                // Write inner loop metadata back to PC here
               }
-              if (macro_loop_metadata[macroMetadataIndex][2] > macro_loop_metadata[macroMetadataIndex][7]) {
+              if (inner_loop_metadata[macroMetadataIndex][2] > inner_loop_metadata[macroMetadataIndex][7]) {
                 // Inner loop ended?
+                // Write inner loop metadata back to PC here
                 Serial.println("Inner loop ended");
                 Serial.print("F currentMacroIndexRunning  = ");
                 Serial.println(currentMacroIndexRunning);
-                currentMacroIndexRunning = macro_loop_metadata[macroMetadataIndex][6];
-                macro_loop_metadata[macroMetadataIndex][2] = macro_loop_metadata[macroMetadataIndex][6];
-                macro_loop_metadata[macroMetadataIndex][4]++;
-                Serial.print("macro_loop_metadata[macroMetadataIndex][4] = ");
-                Serial.println(macro_loop_metadata[macroMetadataIndex][4]);
+                currentMacroIndexRunning = inner_loop_metadata[macroMetadataIndex][6];
+                inner_loop_metadata[macroMetadataIndex][2] = inner_loop_metadata[macroMetadataIndex][6];
+                inner_loop_metadata[macroMetadataIndex][4]++;
+                Serial.print("inner_loop_metadata[macroMetadataIndex][4] = ");
+                Serial.println(inner_loop_metadata[macroMetadataIndex][4]);
                 Serial.print("G currentMacroIndexRunning  = ");
                 Serial.println(currentMacroIndexRunning);
+                // Write inner loop metadata back to PC here
               }
             }
-            if (macro_loop_metadata[macroMetadataIndex][3] > 0 && macro_loop_metadata[macroMetadataIndex][4] > macro_loop_metadata[macroMetadataIndex][3]) {
-              Serial.println("Broke out from inner loop?");
+            if (inner_loop_metadata[macroMetadataIndex][3] > 0 && inner_loop_metadata[macroMetadataIndex][4] > inner_loop_metadata[macroMetadataIndex][3]) {
+              Serial.println("Broke out from inner loop?");
               Serial.print("H currentMacroIndexRunning  = ");
               Serial.println(currentMacroIndexRunning);
-              currentMacroIndexRunning = macro_loop_metadata[macroMetadataIndex][7] + 1;
+              //currentMacroIndexRunning = inner_loop_metadata[macroMetadataIndex][7] + 1;
+              macroMetadataIndex++;
               Serial.print("I currentMacroIndexRunning  = ");
               Serial.println(currentMacroIndexRunning);
             }
             Serial.print("J currentMacroIndexRunning  = ");
             Serial.println(currentMacroIndexRunning);
           }
-          if (macro_loop_metadata[macroMetadataIndex][1] <= 0 || macro_loop_metadata[macroMetadataIndex][3] <= 0) {
+          if (inner_loop_metadata[macroMetadataIndex][1] <= 0 || inner_loop_metadata[macroMetadataIndex][3] <= 0) {
             // Ignore this inner loop, it is not valid
             Serial.println("This inner loop metadata is not valid");
+            Serial.print("K currentMacroIndexRunning  = ");
+            Serial.println(currentMacroIndexRunning);
             currentMacroIndexRunning++;
+            Serial.print("L currentMacroIndexRunning  = ");
+            Serial.println(currentMacroIndexRunning);
           }
         }
         //Serial.print("B AFTER currentMacroIndexRunning = ");

            Serial.write(0x00);
            Serial.write(0x00);
            Serial.write(endingMacroIndex);
            Serial.print("F AFTER loopCounter = ");
            Serial.println(loopCounter);
          }
        }

          isInputtingDelayed = false;
          macroMetadataIndex = serial_rx_buffer[0] - startingMacroMetadataIndex;
          /*
            inner_loop_metadata[macroMetadataIndex][0] = 0; // Preamble
            inner_loop_metadata[macroMetadataIndex][1] = 0; // Inputs to execute (number of inputs that should be executed in this inner loop) (Use same logic as [5] here instead?)
            inner_loop_metadata[macroMetadataIndex][2] = 0; // Current input index
            inner_loop_metadata[macroMetadataIndex][3] = 0; // Times to repeat (number of times this inner loop should be executed, before going to the next inner loop, if any)
            inner_loop_metadata[macroMetadataIndex][4] = 0; // Repeat counter (number of times this inner loop was executed)
            inner_loop_metadata[macroMetadataIndex][5] = 0; // Where is the next inner loop's first input (index 0 input for the next inner loop, aka the index for the input in the macro_buffer array) (Continue normally if value is 0, or do nothing if there are no more inputs to be executed) // Current unused, apply logic to this
            inner_loop_metadata[macroMetadataIndex][6] = 0; // Where to start (index of the starting input) (Inclusive)
            inner_loop_metadata[macroMetadataIndex][7] = 0; // Where to end (index of the ending input) (Inclusive)
            inner_loop_metadata[macroMetadataIndex][8] = 0; // How many inner loops that should be executed after this (if <=0, don't execute inner loops any inner loops after this, and move on as normal, if there are normal inputs to be exeucuted, execute those, if there's nothing else to do, go back to the beginning of the larger loop, if > 0, execute n inner loops after this) // Currently unused, apply logic to this
            inner_loop_metadata[macroMetadataIndex][9] = 0; // Unused?
            inner_loop_metadata[macroMetadataIndex][10] = 0; // Unused?
            inner_loop_metadata[macroMetadataIndex][11] = 0; // Postamble
          */
          for (uint8_t macroInputMetadataIndex = 0; macroInputMetadataIndex < sizeof(serial_rx_buffer); macroInputMetadataIndex++) {
            inner_loop_metadata[macroMetadataIndex][macroInputMetadataIndex] = serial_rx_buffer[macroInputMetadataIndex];
            //Serial.print("macroMetadataIndex = ");
            //Serial.println(macroMetadataIndex);
            //Serial.print("macroInputMetadataIndex = ");
            //Serial.println(macroInputMetadataIndex);
            Serial.println("Toast");
            Serial.println(inner_loop_metadata[macroMetadataIndex][macroInputMetadataIndex]);
          }
          //Serial.println("");
        }
