diff --git a/goatherd.go b/goatherd.go
index cc02fccff683d71af28f2057864376e2d4d0ba0e..44956d3fb44b6d5edcce4f0b7c14997189acd925 100644
--- a/goatherd.go
+++ b/goatherd.go
@@ -337,15 +337,20 @@ func main() {
     db, err := sql.Open("sqlite3", cfg.Db_url)
     err_fatal(err)
 
+    // default action is to serve, but not if one of the other actions is given
+    serve_default := true
+
     if *flag_init_db {
+        serve_default = false
         create_table(db)
     }
 
     if *flag_add_user != "" {
+        serve_default = false
         create_user(db, *flag_add_user, *flag_secret)
     }
 
-    if *flag_serve {
+    if serve_default || *flag_serve {
         faildelay.userlocks = make(map[string]*sync.Mutex)
 
         var listener net.Listener