diff --git a/src/client/actions/encryption.cpp b/src/client/actions/encryption.cpp
--- a/src/client/actions/encryption.cpp
+++ b/src/client/actions/encryption.cpp
@@ -73,7 +73,7 @@
             return { std::move(m), simpleFail };
         }
 
-        kzo.client.dbg() << "Generating one-time keys..." << std::endl;
+        kzo.client.dbg() << "Generating " << a.numToGen << " one-time keys..." << std::endl;
 
         auto maxNumKeys = m.constCrypto().maxNumberOfOneTimeKeys();
         auto numLocalKeys = m.constCrypto().numUnpublishedOneTimeKeys();
diff --git a/src/client/client-model.cpp b/src/client/client-model.cpp
--- a/src/client/client-model.cpp
+++ b/src/client/client-model.cpp
@@ -266,6 +266,9 @@
         // Subtract the number of existing one-time keys, in case
         // the previous upload was not successful.
         int numKeysToGenerate = numKeysNeeded - crypto.numUnpublishedOneTimeKeys();
+        if (numKeysToGenerate < 0) {
+            numKeysToGenerate = 0;
+        }
 
         return numKeysToGenerate;
     }