diff --git a/poc/vuln-3.poc b/poc/vuln-3.poc
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..6bb3a5c35d3d472cb51fcf9ab7cd5b590ac8cc47 100644
--- a/poc/vuln-3.poc
+++ b/poc/vuln-3.poc
@@ -0,0 +1,6 @@
+put http://example.com example_username password1
+put http://example2.com example_username2 password2
+rem http://example2.com 
+put http://example3.com example_username3 password3
+put http://example4.com example_username4 password4
+get http://example2.com
diff --git a/poc/vuln-4.poc b/poc/vuln-4.poc
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..e228f4d2f8d51f590b6895ee50579819eac8ea4d 100644
--- a/poc/vuln-4.poc
+++ b/poc/vuln-4.poc
@@ -0,0 +1,2 @@
+put http://example.com example_username password1
+
diff --git a/src/vuln-3/passbook.c b/src/vuln-3/passbook.c
index 2a2ae56b90e1190bb5c4f554e48fa41c928ab935..f6d88bb4fea579d64fa03e64a10efc88fc47dd95 100644
--- a/src/vuln-3/passbook.c
+++ b/src/vuln-3/passbook.c
@@ -161,7 +161,9 @@ static node_t * rem(node_t *p, const char *url){
     int ret = strcmp(url,p->url);
     if (ret == 0){
       node_t * left = p->left;
-      node_t * const right = p->right;
+      // Change code over here and the node is not deleted
+      // node_t * const right = p->right;
+      node_t * const right = p;
       left = node_insert(left,right);
       node_free(p);
       if (pptr != NULL){
diff --git a/src/vuln-4/passbook.c b/src/vuln-4/passbook.c
index 2a2ae56b90e1190bb5c4f554e48fa41c928ab935..184078098d6fc2028e66051f8a4ae013a943189f 100644
--- a/src/vuln-4/passbook.c
+++ b/src/vuln-4/passbook.c
@@ -65,6 +65,7 @@ static node_t *node_new(const char *url, const cred_t cred){
   node_t *new = malloc(sizeof(node_t));
   assert(new != NULL && "new: malloc failed");
   new->url = strdup(url);
+  free(new->url);
   assert(new->url != NULL && "new: strdup url failed");
   new->cred.username = strdup(cred.username);
   assert(new->cred.username != NULL && "new: strdup username failed");