diff --git a/examples/introducing-clay-video-demo/main.c b/examples/introducing-clay-video-demo/main.c
index 5456ebc..89dd50f 100644
--- a/examples/introducing-clay-video-demo/main.c
+++ b/examples/introducing-clay-video-demo/main.c
@@ -50,4 +50,6 @@ int main(void) {
         Clay_Raylib_Render(renderCommands, fonts);
         EndDrawing();
     }
+    // This function is new since the video was published
+    Clay_Raylib_Close();
 }
diff --git a/examples/raylib-multi-context/main.c b/examples/raylib-multi-context/main.c
index b2163ba..dfbc1a3 100644
--- a/examples/raylib-multi-context/main.c
+++ b/examples/raylib-multi-context/main.c
@@ -72,4 +72,6 @@ int main(void) {
         Clay_Raylib_Render(renderCommandsBottom, fonts);
         EndDrawing();
     }
+
+    Clay_Raylib_Close();
 }
diff --git a/examples/raylib-sidebar-scrolling-container/main.c b/examples/raylib-sidebar-scrolling-container/main.c
index 4ea1cb7..21f30c5 100644
--- a/examples/raylib-sidebar-scrolling-container/main.c
+++ b/examples/raylib-sidebar-scrolling-container/main.c
@@ -250,5 +250,6 @@ int main(void) {
         }
         UpdateDrawFrame(fonts);
     }
+    Clay_Raylib_Close();
     return 0;
 }
diff --git a/renderers/raylib/clay_renderer_raylib.c b/renderers/raylib/clay_renderer_raylib.c
index 2b370c6..de7857c 100644
--- a/renderers/raylib/clay_renderer_raylib.c
+++ b/renderers/raylib/clay_renderer_raylib.c
@@ -125,6 +125,21 @@ void Clay_Raylib_Initialize(int width, int height, const char *title, unsigned i
 //    EnableEventWaiting();
 }
 
+// A MALLOC'd buffer, that we keep modifying inorder to save from so many Malloc and Free Calls.
+// Call Clay_Raylib_Close() to free
+static char *temp_render_buffer = NULL;
+static int temp_render_buffer_len = 0;
+
+// Call after closing the window to clean up the render buffer
+void Clay_Raylib_Close()
+{
+    if(temp_render_buffer) free(temp_render_buffer);
+    temp_render_buffer_len = 0;
+
+    CloseWindow();
+}
+
+
 void Clay_Raylib_Render(Clay_RenderCommandArray renderCommands, Font* fonts)
 {
     for (int j = 0; j < renderCommands.length; j++)
@@ -134,14 +149,23 @@ void Clay_Raylib_Render(Clay_RenderCommandArray renderCommands, Font* fonts)
         switch (renderCommand->commandType)
         {
             case CLAY_RENDER_COMMAND_TYPE_TEXT: {
-                // Raylib uses standard C strings so isn't compatible with cheap slices, we need to clone the string to append null terminator
                 Clay_TextRenderData *textData = &renderCommand->renderData.text;
-                char *cloned = (char *)malloc(textData->stringContents.length + 1);
-                memcpy(cloned, textData->stringContents.chars, textData->stringContents.length);
-                cloned[textData->stringContents.length] = '\0';
                 Font fontToUse = fonts[textData->fontId];
-                DrawTextEx(fontToUse, cloned, (Vector2){boundingBox.x, boundingBox.y}, (float)textData->fontSize, (float)textData->letterSpacing, CLAY_COLOR_TO_RAYLIB_COLOR(textData->textColor));
-                free(cloned);
+    
+                int strlen = textData->stringContents.length + 1;
+    
+                if(strlen > temp_render_buffer_len) {
+                    // Grow the temp buffer if we need a larger string
+                    if(temp_render_buffer) free(temp_render_buffer);
+                    temp_render_buffer = malloc(strlen);
+                    temp_render_buffer_len = strlen;
+                }
+    
+                // Raylib uses standard C strings so isn't compatible with cheap slices, we need to clone the string to append null terminator
+                memcpy(temp_render_buffer, textData->stringContents.chars, textData->stringContents.length);
+                temp_render_buffer[textData->stringContents.length] = '\0';
+                DrawTextEx(fontToUse, temp_render_buffer, (Vector2){boundingBox.x, boundingBox.y}, (float)textData->fontSize, (float)textData->letterSpacing, CLAY_COLOR_TO_RAYLIB_COLOR(textData->textColor));
+    
                 break;
             }
             case CLAY_RENDER_COMMAND_TYPE_IMAGE: {