diff --git a/src/crypt.c b/src/crypt.c
index f844e42..1b2ece5 100644
--- a/src/crypt.c
+++ b/src/crypt.c
@@ -146,9 +146,9 @@
 	FALSE,
 	NULL,
 	crypt_sodium_init,
-	crypt_sodium_encode, crypt_sodium_decode,
+	NULL, NULL,
 	crypt_sodium_buffer_encode, crypt_sodium_buffer_decode,
-	crypt_sodium_encode, crypt_sodium_decode,
+	NULL, NULL,
     },
 
     // NOTE: when adding a new method, use some random bytes for the magic key,
@@ -250,6 +250,26 @@
 	+ cryptmethods[method_nr].seed_len;
 }
 
+
+/*
+ * Get maximum crypt method specific length of the file header in bytes.
+ */
+    int
+crypt_get_max_header_len()
+{
+    int i;
+    int max = 0;
+    int temp = 0;
+
+    for (i = 0; i < CRYPT_M_COUNT; ++i)
+    {
+	temp = crypt_get_header_len(i);
+	if (temp > max)
+	    max = temp;
+    }
+    return max;
+}
+
 /*
  * Set the crypt method for buffer "buf" to "method_nr" using the int value as
  * returned by crypt_method_nr_from_name().
@@ -403,8 +423,10 @@
 #ifdef FEAT_SODIUM
 	if (sodium_init() >= 0)
 	{
-	    randombytes_buf(salt, salt_len);
-	    randombytes_buf(seed, seed_len);
+	    if (salt_len > 0)
+		randombytes_buf(salt, salt_len);
+	    if (seed_len > 0)
+		randombytes_buf(seed, seed_len);
 	}
 	else
 #endif
@@ -581,6 +603,13 @@
 	msg_scroll = TRUE;
 	msg(_("Warning: Using a weak encryption method; see :help 'cm'"));
     }
+}
+
+#ifdef FEAT_SODIUM
+    static void
+crypt_check_swapfile_curbuf(void)
+{
+    int method = crypt_get_method_nr(curbuf);
     if (method == CRYPT_M_SOD)
     {
 	// encryption uses padding and MAC, that does not work very well with
@@ -590,11 +619,11 @@
 #ifdef FEAT_PERSISTENT_UNDO
 	set_option_value((char_u *)"udf", 0, NULL, OPT_LOCAL);
 #endif
-
 	msg_scroll = TRUE;
 	msg(_("Note: Encryption of swapfile not supported, disabling swap- and undofile"));
     }
 }
+#endif
 
     void
 crypt_check_current_method(void)
@@ -647,6 +676,9 @@
 		set_option_value((char_u *)"key", 0L, p1, OPT_LOCAL);
 		crypt_free_key(p1);
 		p1 = curbuf->b_p_key;
+#ifdef FEAT_SODIUM
+		crypt_check_swapfile_curbuf();
+#endif
 	    }
 	    break;
 	}
@@ -654,10 +686,13 @@
     }
 
     // since the user typed this, no need to wait for return
-    if (msg_didout)
-	msg_putchar('\n');
-    need_wait_return = FALSE;
-    msg_didout = FALSE;
+    if (crypt_get_method_nr(curbuf) != CRYPT_M_SOD)
+    {
+	if (msg_didout)
+	    msg_putchar('\n');
+	need_wait_return = FALSE;
+	msg_didout = FALSE;
+    }
 
     crypt_free_key(p2);
     return p1;
@@ -726,6 +761,7 @@
  * "from" and "to" can be equal to encrypt in place.
  * Call needs to ensure that there is enough space in to (for the header)
  */
+#if 0  // Currently unused
     void
 crypt_sodium_encode(
     cryptstate_T *state UNUSED,
@@ -764,11 +800,13 @@
     sod_st->count++;
 # endif
 }
+#endif
 
-/* TODO: Unused
+/*
  * Decrypt "from[len]" into "to[len]".
  * "from" and "to" can be equal to encrypt in place.
  */
+#if 0  // Currently unused
     void
 crypt_sodium_decode(
     cryptstate_T *state UNUSED,
@@ -841,6 +879,7 @@
     vim_free(buf_out);
 # endif
 }
+#endif
 
 /*
  * Encrypt "from[len]" into "to[len]".
@@ -864,7 +903,7 @@
     sodium_state_T	*sod_st = state->method_state;
     int			first = (sod_st->count == 0);
 
-    length = len + crypto_secretstream_xchacha20poly1305_ABYTES
+    length = (int)len + crypto_secretstream_xchacha20poly1305_ABYTES
 	     + (first ? crypto_secretstream_xchacha20poly1305_HEADERBYTES : 0);
     *buf_out = alloc_clear(length);
     if (*buf_out == NULL)
