* isis_lsp.c (lsp_update): Remove LSP from database before updating
	  its data and put it back after. Database entry MUST contain at least
	  correct pointers to the sysid to get correct compare results.
	* isis_lsp.[ch], isis_pdu.c: Pass level to the lsp_update() function.
diff --git a/isisd/isis_lsp.c b/isisd/isis_lsp.c
index 2a9d146..d147c65 100644
--- a/isisd/isis_lsp.c
+++ b/isisd/isis_lsp.c
@@ -416,8 +416,14 @@
 
 void
 lsp_update (struct isis_lsp *lsp, struct isis_link_state_hdr *lsp_hdr,
-	    struct stream *stream, struct isis_area *area)
+	    struct stream *stream, struct isis_area *area, int level)
 {
+  dnode_t *dnode;
+
+  /* Remove old LSP from LSP database. */
+  dnode = dict_lookup (area->lspdb[level], lsp->lsp_header->lsp_id);
+  dnode_destroy (dict_delete (area->lspdb[level], dnode));
+
   /* free the old lsp data */
   XFREE (MTYPE_STREAM_DATA, lsp->pdu);
   lsp_clear_data (lsp);
@@ -427,6 +433,9 @@
 
   /* set the new values for lsp header */
   memcpy (lsp->lsp_header, lsp_hdr, ISIS_LSP_HDR_LEN);
+
+  /* Put LSP back into LSP database, now with updated data. */
+  lsp_insert (lsp, area->lspdb[level]);
 }
 
 /* creation of LSP directly from what we received */