diff --git a/README.md b/README.md
index 9aba6a5004a7bf6a15e26d3e0191ca54267dd569..4022e153ae51beaecadecc68e233c5dbdc6929f3 100644
--- a/README.md
+++ b/README.md
@@ -1,10 +1,10 @@
 Image Board
 -----------
-Taggable image board in 1272 lines of code.
+Taggable image board with multiple backend implementations.
 
 Get it:
 ```shell
-go get random.chars.jp/git/image-board
+go get random.chars.jp/git/image-board/v2
 ```
 
 Client example:
@@ -13,7 +13,7 @@ package main
 
 import (
 	"fmt"
-	"random.chars.jp/git/image-board/client"
+	"random.chars.jp/git/image-board-client"
 )
 
 func main() {
diff --git a/config.go b/config.go
index fe336098849cf7ab8d8e48d187dc95df7cee2f68..9a1fcfd34e244854a403d16e780808d087c86855 100644
--- a/config.go
+++ b/config.go
@@ -22,6 +22,7 @@ type serverConf struct {
 
 type systemConf struct {
 	Verbose    bool   `toml:"verbose"`
+	Backend    string `toml:"backend"`
 	Store      string `toml:"store"`
 	SingleUser bool   `toml:"single-user"`
 	Private    bool   `toml:"private"`
@@ -67,6 +68,7 @@ func confLoad() {
 var defConf = conf{
 	System: systemConf{
 		Verbose:    false,
+		Backend:    "filesystem",
 		Store:      "db",
 		SingleUser: true,
 		Private:    false,
diff --git a/main.go b/main.go
index 2a1a46b57e6446cc831fa6c3d9e3aa095bf50fbb..0026fdaa8d5e9dba6cdc8a8bd5692e25217744c4 100644
--- a/main.go
+++ b/main.go
@@ -23,14 +23,23 @@ func main() {
 
 	confLoad()
 
-	// TODO: support more backends
-	instance = filesystem.New(config.System.Store, config.System.Verbose)
+	var doSuccess func()
+	switch config.System.Backend {
+	case "filesystem":
+		instance = filesystem.New(config.System.Store, config.System.Verbose)
+		doSuccess = func() {
+			log.Printf("store path %s revision %v compat %v",
+				config.System.Store, instance.(*filesystem.Store).Revision, instance.(*filesystem.Store).Compat)
+		}
+	default:
+		log.Fatalf("store backend %s does not exist", config.System.Backend)
+	}
+
 	if err := instance.Open(); err != nil {
 		log.Printf("error opening store: %s", err)
 		return
 	} else {
-		log.Printf("store path %s revision %v compat %v",
-			config.System.Store, instance.(*filesystem.Store).Revision, instance.(*filesystem.Store).Compat)
+		doSuccess()
 	}
 
 	if info, err := instance.User(instance.UserInitial()); err == nil {