diff --git a/database/database.go b/database/database.go
index 100bf62..914ec97 100644
--- a/database/database.go
+++ b/database/database.go
@@ -33,7 +33,6 @@
 	"bytes"
 	"encoding/gob"
 	"errors"
-	"flag"
 	"fmt"
 	"log"
 	"math"
@@ -71,15 +70,16 @@
 func (p byPath) Less(i, j int) bool { return p[i].Path < p[j].Path }
 func (p byPath) Swap(i, j int)      { p[i], p[j] = p[j], p[i] }
 
+// Configuration variables (and default values of flags.
 var (
-	redisServer      = flag.String("db-server", "redis://127.0.0.1:6379", "URI of Redis server.")
-	redisIdleTimeout = flag.Duration("db-idle-timeout", 250*time.Second, "Close Redis connections after remaining idle for this duration.")
-	redisLog         = flag.Bool("db-log", false, "Log database commands")
-	GAESearch        = flag.Bool("gae_search", false, "Use GAE Search API in the search function.")
+	RedisServer      = "redis://127.0.0.1:6379" // URL of Redis server
+	RedisIdleTimeout = 250 * time.Second        // Close Redis connections after remaining idle for this duration.
+	RedisLog         = false                    // Log database commands
+	GAESearch        = false                    // Use GAE Search API in the search function.
 )
 
 func dialDb() (c redis.Conn, err error) {
-	u, err := url.Parse(*redisServer)
+	u, err := url.Parse(RedisServer)
 	if err != nil {
 		return nil, err
 	}
@@ -95,7 +95,7 @@
 		return
 	}
 
-	if *redisLog {
+	if RedisLog {
 		l := log.New(os.Stderr, "", log.LstdFlags)
 		c = redis.NewLoggingConn(c, l, "")
 	}
@@ -115,7 +115,7 @@
 	pool := &redis.Pool{
 		Dial:        dialDb,
 		MaxIdle:     10,
-		IdleTimeout: *redisIdleTimeout,
+		IdleTimeout: RedisIdleTimeout,
 	}
 
 	c := pool.Get()
@@ -264,7 +264,7 @@
 		return err
 	}
 
-	if *GAESearch {
+	if GAESearch {
 		id, n, err := pkgIDAndImportCount(c, pdoc.ImportPath)
 		if err != nil {
 			return err
diff --git a/gddo-server/main.go b/gddo-server/main.go
index a68edb3..d04f274 100644
--- a/gddo-server/main.go
+++ b/gddo-server/main.go
@@ -577,7 +577,7 @@
 		pkgs []database.Package
 		err  error
 	)
-	if *database.GAESearch {
+	if database.GAESearch {
 		ctx := appengine.NewContext(req)
 		pkgs, err = database.Search(ctx, q)
 	} else {
@@ -869,6 +869,13 @@
 	sourcegraphURL  = flag.String("sourcegraph_url", "https://sourcegraph.com", "Link to global uses on Sourcegraph based at this URL (no need for trailing slash).")
 )
 
+func init() {
+	flag.StringVar(&database.RedisServer, "db-server", database.RedisServer, "URI of Redis server.")
+	flag.DurationVar(&database.RedisIdleTimeout, "db-idle-timeout", database.RedisIdleTimeout, "Close Redis connections after remaining idle for this duration.")
+	flag.BoolVar(&database.RedisLog, "db-log", database.RedisLog, "Log database commands")
+	flag.BoolVar(&database.GAESearch, "gae_search", database.GAESearch, "Use GAE Search API in the search function.")
+}
+
 func main() {
 	flag.Parse()
 	log.Printf("Starting server, os.Args=%s", strings.Join(os.Args, " "))
@@ -1019,7 +1026,7 @@
 		gceLogger = newGCELogger(logc)
 	}
 
-	if *database.GAESearch {
+	if database.GAESearch {
 		http.Handle("/", root)
 		appengine.Main()
 	} else {
