logger       loggers.Logger
        serverConfig *config.Server
 
+       // Loading state
+       mustHaveConfigFile bool
+       failOnInitErr      bool
+       running            bool
+
        // Currently only set when in "fast render mode". But it seems to
        // be fast enough that we could maybe just add it for all server modes.
        changeDetector *fileChangeDetector
        return nil
 }
 
-func newCommandeer(mustHaveConfigFile, running bool, h *hugoBuilderCommon, f flagsToConfigHandler, cfgInit func(c *commandeer) error, subCmdVs ...*cobra.Command) (*commandeer, error) {
+func newCommandeer(mustHaveConfigFile, failOnInitErr, running bool, h *hugoBuilderCommon, f flagsToConfigHandler, cfgInit func(c *commandeer) error, subCmdVs ...*cobra.Command) (*commandeer, error) {
        var rebuildDebouncer func(f func())
        if running {
                // The time value used is tested with mass content replacements in a fairly big Hugo site.
                visitedURLs:         types.NewEvictingStringQueue(10),
                debounce:            rebuildDebouncer,
                fullRebuildSem:      semaphore.NewWeighted(1),
+
+               // Init state
+               mustHaveConfigFile: mustHaveConfigFile,
+               failOnInitErr:      failOnInitErr,
+               running:            running,
+
                // This will be replaced later, but we need something to log to before the configuration is read.
                logger: loggers.NewLogger(jww.LevelWarn, jww.LevelError, out, ioutil.Discard, running),
        }
 
-       return c, c.loadConfig(mustHaveConfigFile, running)
+       return c, c.loadConfig()
 }
 
 type fileChangeDetector struct {
        f.current = make(map[string]string)
 }
 
-func (c *commandeer) loadConfig(mustHaveConfigFile, running bool) error {
+func (c *commandeer) loadConfig() error {
        if c.DepsCfg == nil {
                c.DepsCfg = &deps.DepsCfg{}
        }
 
        cfg := c.DepsCfg
        c.configured = false
-       cfg.Running = running
+       cfg.Running = c.running
 
        var dir string
        if c.h.source != "" {
                sourceFs = c.DepsCfg.Fs.Source
        }
 
-       environment := c.h.getEnvironment(running)
+       environment := c.h.getEnvironment(c.running)
 
        doWithConfig := func(cfg config.Provider) error {
                if c.ftch != nil {
                // We should improve the error handling here,
                // but with hugo mod init and similar there is a chicken and egg situation
                // with modules already configured in config.toml, so ignore those errors.
-               if mustHaveConfigFile || !moduleNotFoundRe.MatchString(err.Error()) {
+               if c.mustHaveConfigFile || !moduleNotFoundRe.MatchString(err.Error()) {
                        return err
                }
-       } else if mustHaveConfigFile && len(configFiles) == 0 {
+       } else if c.mustHaveConfigFile && len(configFiles) == 0 {
                return hugolib.ErrNoConfigFile
        }
 
        }
 
        // Set some commonly used flags
-       c.doLiveReload = running && !c.Cfg.GetBool("disableLiveReload")
+       c.doLiveReload = c.running && !c.Cfg.GetBool("disableLiveReload")
        c.fastRenderMode = c.doLiveReload && !c.Cfg.GetBool("disableFastRender")
        c.showErrorInBrowser = c.doLiveReload && !c.Cfg.GetBool("disableBrowserError")
 
                }
        }
 
-       logger, err := c.createLogger(config, running)
+       logger, err := c.createLogger(config)
        if err != nil {
                return err
        }
 
                var h *hugolib.HugoSites
 
-               h, err = hugolib.NewHugoSites(*c.DepsCfg)
+               var createErr error
+               h, createErr = hugolib.NewHugoSites(*c.DepsCfg)
+               if h == nil || c.failOnInitErr {
+                       err = createErr
+               }
                c.hugoSites = h
                close(c.created)
        })
 
                        // prevent cobra printing error so it can be handled here (before the timeTrack prints)
                        cmd.SilenceErrors = true
 
-                       c, err := initializeConfig(true, cc.buildWatch, &cc.hugoBuilderCommon, cc, cfgInit)
+                       c, err := initializeConfig(true, true, cc.buildWatch, &cc.hugoBuilderCommon, cc, cfgInit)
                        if err != nil {
                                cmd.PrintErrln("Error:", err.Error())
                                return err
 
 }
 
 func (c *configCmd) printMounts(cmd *cobra.Command, args []string) error {
-       cfg, err := initializeConfig(true, false, &c.hugoBuilderCommon, c, nil)
+       cfg, err := initializeConfig(true, false, false, &c.hugoBuilderCommon, c, nil)
        if err != nil {
                return err
        }
 }
 
 func (c *configCmd) printConfig(cmd *cobra.Command, args []string) error {
-       cfg, err := initializeConfig(true, false, &c.hugoBuilderCommon, c, nil)
+       cfg, err := initializeConfig(true, false, false, &c.hugoBuilderCommon, c, nil)
        if err != nil {
                return err
        }
 
                return newUserError("Unsafe operation not allowed, use --unsafe or set a different output path")
        }
 
-       c, err := initializeConfig(true, false, &cc.hugoBuilderCommon, cc, nil)
+       c, err := initializeConfig(true, false, false, &cc.hugoBuilderCommon, cc, nil)
        if err != nil {
                return err
        }
 
                                c.Set("maxDeletes", cc.maxDeletes)
                                return nil
                        }
-                       comm, err := initializeConfig(true, false, &cc.hugoBuilderCommon, cc, cfgInit)
+                       comm, err := initializeConfig(true, true, false, &cc.hugoBuilderCommon, cc, cfgInit)
                        if err != nil {
                                return err
                        }
 
 }
 
 // InitializeConfig initializes a config file with sensible default configuration flags.
-func initializeConfig(mustHaveConfigFile, running bool,
+func initializeConfig(mustHaveConfigFile, failOnInitErr, running bool,
        h *hugoBuilderCommon,
        f flagsToConfigHandler,
        cfgInit func(c *commandeer) error) (*commandeer, error) {
-       c, err := newCommandeer(mustHaveConfigFile, running, h, f, cfgInit)
+       c, err := newCommandeer(mustHaveConfigFile, failOnInitErr, running, h, f, cfgInit)
        if err != nil {
                return nil, err
        }
        return c, nil
 }
 
-func (c *commandeer) createLogger(cfg config.Provider, running bool) (loggers.Logger, error) {
+func (c *commandeer) createLogger(cfg config.Provider) (loggers.Logger, error) {
        var (
                logHandle       = ioutil.Discard
                logThreshold    = jww.LevelWarn
        loggers.InitGlobalLogger(stdoutThreshold, logThreshold, outHandle, logHandle)
        helpers.InitLoggers()
 
-       return loggers.NewLogger(stdoutThreshold, logThreshold, outHandle, logHandle, running), nil
+       return loggers.NewLogger(stdoutThreshold, logThreshold, outHandle, logHandle, c.running), nil
 }
 
 func initializeFlags(cmd *cobra.Command, cfg config.Provider) {
                defer c.timeTrack(time.Now(), "Rebuilt")
 
                c.commandeerHugoState = newCommandeerHugoState()
-               err := c.loadConfig(true, true)
+               err := c.loadConfig()
                if err != nil {
                        // Set the processing on pause until the state is recovered.
                        c.paused = true
 
                return nil
        }
 
-       c, err := initializeConfig(true, false, &lc.hugoBuilderCommon, lc, cfgInit)
+       c, err := initializeConfig(true, true, false, &lc.hugoBuilderCommon, lc, cfgInit)
        if err != nil {
                return nil, err
        }
 
 }
 
 func (c *modCmd) initConfig(failOnNoConfig bool) (*commandeer, error) {
-       com, err := initializeConfig(failOnNoConfig, false, &c.hugoBuilderCommon, c, nil)
+       com, err := initializeConfig(failOnNoConfig, false, false, &c.hugoBuilderCommon, c, nil)
        if err != nil {
                return nil, err
        }
 
                return nil
        }
 
-       c, err := initializeConfig(true, false, &n.hugoBuilderCommon, n, cfgInit)
+       c, err := initializeConfig(true, true, false, &n.hugoBuilderCommon, n, cfgInit)
        if err != nil {
                return err
        }
 
 
 // newTheme creates a new Hugo theme template
 func (n *newThemeCmd) newTheme(cmd *cobra.Command, args []string) error {
-       c, err := initializeConfig(false, false, &n.hugoBuilderCommon, n, nil)
+       c, err := initializeConfig(false, false, false, &n.hugoBuilderCommon, n, nil)
        if err != nil {
                return err
        }
 
        // silence errors in cobra so we can handle them here
        cmd.SilenceErrors = true
 
-       c, err := initializeConfig(true, true, &sc.hugoBuilderCommon, sc, cfgInit)
+       c, err := initializeConfig(true, true, true, &sc.hugoBuilderCommon, sc, cfgInit)
        if err != nil {
                cmd.PrintErrln("Error:", err.Error())
                return err
 
                return nil, errors.New("Cannot provide Language in Cfg when sites are provided")
        }
 
+       // Return error at the end. Make the caller decide if it's fatal or not.
+       var initErr error
+
        langConfig, err := newMultiLingualFromSites(cfg.Cfg, sites...)
        if err != nil {
                return nil, errors.Wrap(err, "failed to create language config")
 
        var l configLoader
        if err := l.applyDeps(cfg, sites...); err != nil {
-               return nil, errors.Wrap(err, "add site dependencies")
+               initErr = errors.Wrap(err, "add site dependencies")
        }
 
        h.Deps = sites[0].Deps
                h.ContentChanges = contentChangeTracker
        }
 
-       return h, nil
+       return h, initErr
 }
 
 func (h *HugoSites) loadGitInfo() error {