diff --git a/src/object.c b/src/object.c
index 384baf7..86ab239 100644
--- a/src/object.c
+++ b/src/object.c
@@ -9052,24 +9052,6 @@ f_restore_value (svalue_t *sp)
     restored_version = -1;
     restored_host = -1;
 
-    /* Check if there is a version line */
-    if (buff[0] == '#')
-    {
-        int i;
-
-        i = sscanf(buff+1, "%d:%d", &restored_version, &restored_host);
-
-        /* Advance to the next line */
-        p = strchr(buff, '\n');
-        if (!p)
-        {
-            xfree(buff);
-            errorf("No data given.\n");
-            return sp-1;
-        }
-        buff = p+1;
-    }
-
     /* Initialise the shared value table */
 
     max_shared_restored = 64;
@@ -9109,9 +9091,28 @@ f_restore_value (svalue_t *sp)
 
     push_error_handler(restore_value_cleanup, &(rcp->head));
 
+    /* Check if there is a version line */
+    if (buff[0] == '#')
+    {
+        int i;
+
+        i = sscanf(buff+1, "%d:%d", &restored_version, &restored_host);
+
+        /* Advance to the next line */
+        p = strchr(buff, '\n');
+        if (!p)
+        {
+            errorf("No data given.\n");
+            return sp-1;
+        }
+        p++;
+    }
+    else
+        p = buff; /* parse from beginning of buffer */
+
+
     /* Now parse the value in buff[] */
 
-    p = buff;
     if ( (restored_version < 0 && p[0] == '\"')
          ? !old_restore_string(sp, p)
          : !restore_svalue(sp, &p, '\n')
