diff --git a/db_utils.h b/db_utils.h
index 0f64095..16b7a8f 100644
--- a/db_utils.h
+++ b/db_utils.h
@@ -22,22 +22,22 @@ json_object *db_set(const char *key, const char *value);
 json_object *db_get(const char *key);
 json_object *db_query(const char *query);
 
+
+
 void db_initialize() {
   sqlite3 *db;
-  char *err_msg = 0;
   int rc = sqlite3_open(db_file_expanded(), &db);
 
   if (rc != SQLITE_OK) {
     return;
   }
 
-  const char *sql =
-      "CREATE TABLE IF NOT EXISTS kv_store (key TEXT PRIMARY KEY, value TEXT);";
-  rc = sqlite3_exec(db, sql, 0, 0, &err_msg);
-
-  if (rc != SQLITE_OK) {
-    sqlite3_free(err_msg);
-  }
+   db_execute("CREATE TABLE IF NOT EXISTS kv_store (key TEXT PRIMARY KEY, value TEXT);");
+   db_execute("CREATE TABLE IF NOT EXISTS file_version_history ( id INTEGER PRIMARY KEY AUTOINCREMENT,"
+    "path TEXT NOT NULL,"
+    "content TEXT,"
+    "date DATETIME DEFAULT CURRENT_TIMESTAMP"
+    ");");
 
   sqlite3_close(db);
 }
@@ -180,6 +180,19 @@ json_object *db_execute(const char *query) {
   sqlite3_close(db);
   return result;
 }
+void db_store_file_version(const char * path) {
+    char * expanded = expand_home_directory(path);
+
+    char * content = read_file(expanded);
+    if(!content) {
+        return;
+    }
+    fprintf(stderr, "Creating backup:: %s\n", expanded);
+    char * formatted = sqlite3_mprintf("INSERT INTO file_version_history (path, content) VALUES (%Q, %Q)", expanded, content);
+    db_execute(formatted);
+    sqlite3_free(formatted);    
+    free(content);
+}
 char *db_get_schema() {
   json_object *tables =
       db_query("SELECT * FROM sqlite_master WHERE type='table'");
diff --git a/rpylib.so b/rpylib.so
index 2ba02f3..2ed5cce 100755
Binary files a/rpylib.so and b/rpylib.so differ
diff --git a/tools.h b/tools.h
index c0d2404..2b5baff 100644
--- a/tools.h
+++ b/tools.h
@@ -718,7 +718,9 @@ char *tool_function_read_file(char *path) {
 }
 
 char *tool_function_write_file(char *path, char *content) {
-  FILE *fp = fopen(path, "w");
+  db_store_file_version(path);
+
+    FILE *fp = fopen(path, "w");
   if (fp == NULL) {
     perror("fopen failed");
     return strdup("Failed to open file for writing!");