diff --git a/node/src/main/java/CordaCaplet.java b/node/src/main/java/CordaCaplet.java
index f6dd310ea2..4e4e073e95 100644
--- a/node/src/main/java/CordaCaplet.java
+++ b/node/src/main/java/CordaCaplet.java
@@ -4,6 +4,7 @@
 
 import com.typesafe.config.*;
 import sun.misc.Signal;
+
 import java.io.File;
 import java.nio.file.Path;
 import java.nio.file.Paths;
@@ -38,7 +39,7 @@ public class CordaCaplet extends Capsule {
             Config nodeConfig = ConfigFactory.parseFile(configFile, parseOptions);
             return baseDirectoryConfig.withFallback(nodeConfig).withFallback(defaultConfig).resolve();
         } catch (ConfigException e) {
-            log(LOG_QUIET, e);
+            log(LOG_DEBUG, e);
             return ConfigFactory.empty();
         }
     }
diff --git a/node/src/main/kotlin/net/corda/node/internal/NetworkParametersReader.kt b/node/src/main/kotlin/net/corda/node/internal/NetworkParametersReader.kt
index 8b1a7001d6..c85092c624 100644
--- a/node/src/main/kotlin/net/corda/node/internal/NetworkParametersReader.kt
+++ b/node/src/main/kotlin/net/corda/node/internal/NetworkParametersReader.kt
@@ -21,6 +21,19 @@ class NetworkParametersReader(private val trustRoot: X509Certificate,
         private val logger = contextLogger()
     }
 
+    sealed class Error(message: String) : Exception(message) {
+        class ParamsNotConfigured : Error("Couldn't find network parameters file and compatibility zone wasn't configured/isn't reachable.")
+        class NetworkMapNotConfigured : Error("Node hasn't been configured to connect to a network map from which to get the network parameters.")
+        class OldParamsAndUpdate : Error(
+                "Both network parameters and network parameters update files don't match" +
+                "parameters advertised by network map. Please update node to use correct network parameters file."
+        )
+        class OldParams(previousParametersHash: SecureHash, advertisedParametersHash: SecureHash) : Error(
+                "Node uses parameters with hash: $previousParametersHash but network map is advertising: " +
+                        "$advertisedParametersHash. Please update node to use correct network parameters file."
+        )
+    }
+
     private data class NetworkParamsAndHash(val networkParameters: NetworkParameters, val hash: SecureHash)
     private val networkParamsFile = baseDirectory / NETWORK_PARAMS_FILE_NAME
     private val parametersUpdateFile = baseDirectory / NETWORK_PARAMS_UPDATE_FILE_NAME
@@ -53,7 +66,7 @@ class NetworkParametersReader(private val trustRoot: X509Certificate,
                 readParametersUpdate(advertisedParametersHash, signedParametersFromFile.raw.hash)
             }
         } else { // No compatibility zone configured. Node should proceed with parameters from file.
-            signedParametersFromFile ?: throw IllegalArgumentException("Couldn't find network parameters file and compatibility zone wasn't configured/isn't reachable")
+            signedParametersFromFile ?: throw Error.ParamsNotConfigured()
         }
         logger.info("Loaded network parameters: $parameters")
         return NetworkParamsAndHash(parameters.verifiedNetworkMapCert(trustRoot), parameters.raw.hash)
@@ -61,15 +74,11 @@ class NetworkParametersReader(private val trustRoot: X509Certificate,
 
     private fun readParametersUpdate(advertisedParametersHash: SecureHash, previousParametersHash: SecureHash): SignedNetworkParameters {
         if (!parametersUpdateFile.exists()) {
-            throw IllegalArgumentException("Node uses parameters with hash: $previousParametersHash " +
-                    "but network map is advertising: $advertisedParametersHash.\n" +
-                    "Please update node to use correct network parameters file.")
+            throw Error.OldParams(previousParametersHash, advertisedParametersHash)
         }
         val signedUpdatedParameters = parametersUpdateFile.readObject<SignedNetworkParameters>()
         if (signedUpdatedParameters.raw.hash != advertisedParametersHash) {
-            throw IllegalArgumentException("Both network parameters and network parameters update files don't match" +
-                    "parameters advertised by network map.\n" +
-                    "Please update node to use correct network parameters file.")
+            throw Error.OldParamsAndUpdate()
         }
         parametersUpdateFile.moveTo(networkParamsFile, StandardCopyOption.REPLACE_EXISTING)
         logger.info("Scheduled update to network parameters has occurred - node now updated to these new parameters.")
@@ -79,9 +88,7 @@ class NetworkParametersReader(private val trustRoot: X509Certificate,
     // Used only when node joins for the first time.
     private fun downloadParameters(parametersHash: SecureHash): SignedNetworkParameters {
         logger.info("No network-parameters file found. Expecting network parameters to be available from the network map.")
-        val networkMapClient = checkNotNull(networkMapClient) {
-            "Node hasn't been configured to connect to a network map from which to get the network parameters"
-        }
+        val networkMapClient = networkMapClient ?: throw Error.NetworkMapNotConfigured()
         val signedParams = networkMapClient.getNetworkParameters(parametersHash)
         signedParams.serialize().open().copyTo(baseDirectory / NETWORK_PARAMS_FILE_NAME)
         return signedParams
diff --git a/node/src/main/kotlin/net/corda/node/internal/NodeStartup.kt b/node/src/main/kotlin/net/corda/node/internal/NodeStartup.kt
index 790de59c8d..4424236b05 100644
--- a/node/src/main/kotlin/net/corda/node/internal/NodeStartup.kt
+++ b/node/src/main/kotlin/net/corda/node/internal/NodeStartup.kt
@@ -10,12 +10,7 @@ import net.corda.core.internal.*
 import net.corda.core.internal.concurrent.thenMatch
 import net.corda.core.utilities.Try
 import net.corda.core.utilities.loggerFor
-import net.corda.node.CmdLineOptions
-import net.corda.node.NodeArgsParser
-import net.corda.node.NodeRegistrationOption
-import net.corda.node.SerialFilter
-import net.corda.node.VersionInfo
-import net.corda.node.defaultSerialFilter
+import net.corda.node.*
 import net.corda.node.internal.cordapp.MultipleCordappsForFlowException
 import net.corda.node.services.config.NodeConfiguration
 import net.corda.node.services.config.NodeConfigurationImpl
@@ -25,9 +20,9 @@ import net.corda.node.services.transactions.bftSMaRtSerialFilter
 import net.corda.node.utilities.createKeyPairAndSelfSignedTLSCertificate
 import net.corda.node.utilities.registration.HTTPNetworkRegistrationService
 import net.corda.node.utilities.registration.NodeRegistrationHelper
+import net.corda.node.utilities.registration.UnableToRegisterNodeWithDoormanException
 import net.corda.node.utilities.saveToKeyStore
 import net.corda.node.utilities.saveToTrustStore
-import net.corda.node.utilities.registration.UnableToRegisterNodeWithDoormanException
 import net.corda.nodeapi.internal.addShutdownHook
 import net.corda.nodeapi.internal.config.UnknownConfigurationKeysException
 import net.corda.nodeapi.internal.persistence.CouldNotCreateDataSourceException
@@ -154,6 +149,9 @@ open class NodeStartup(val args: Array<String>) {
         } catch (e: CheckpointIncompatibleException) {
             logger.error(e.message)
             return false
+        } catch (e: NetworkParametersReader.Error) {
+            logger.error(e.message)
+            return false
         } catch (e: Exception) {
             if (e is Errors.NativeIoException && e.message?.contains("Address already in use") == true) {
                 logger.error("One of the ports required by the Corda node is already in use.")