diff --git a/modules/proc.c b/modules/proc.c
index e7d40c0d7ce8cf22a1025f5231311ef4b884f936..27b92d4e33d37e03dd361e7fac803142e381e36a 100644
--- a/modules/proc.c
+++ b/modules/proc.c
@@ -116,7 +116,7 @@ static ssize_t procfile_write(struct file *filp, const char __user *buff,
     
     long size;
     int i;
-    char *new_msg, *old_msg;
+    char *new_msg;
 
     procfs_buffer_size = len; 
 
@@ -155,14 +155,13 @@ static ssize_t procfile_write(struct file *filp, const char __user *buff,
 
     
     new_msg = kmalloc(size, GFP_KERNEL);
-    old_msg = msg.text;
-    msg.text = new_msg;
-
-    for (i = 0; i < msg.first_write - msg.first_read; i++) 
-        msg.text[i] = old_msg[i];
     
-    kfree(old_msg);
+    for (i = msg.first_read; i < msg.first_write; i++) 
+        new_msg[i-msg.first_read] = msg.text[i%msg.size];
+    
+    kfree(msg.text);
 
+    msg.text = new_msg;
     msg.size = size;
     msg.first_read = 0;
     msg.first_write = i;