diff --git a/manager/eris-mint/eris-mint_test.go b/manager/eris-mint/eris-mint_test.go
index 8919ad4fc176a48bde74d2102caa80590bd61c78..cc3a7a8815b1259525c5239fe9b91bc1fcc352d7 100644
--- a/manager/eris-mint/eris-mint_test.go
+++ b/manager/eris-mint/eris-mint_test.go
@@ -17,7 +17,6 @@
 package erismint
 
 import (
-  "fmt"
   "testing"
 
   assert "github.com/stretchr/testify/assert"
diff --git a/manager/eris-mint/pipe.go b/manager/eris-mint/pipe.go
index 5fb7f499feef2972f80a81cf21e8df6119fed077..30a3081923bcf650b056843f21abc944258cd79e 100644
--- a/manager/eris-mint/pipe.go
+++ b/manager/eris-mint/pipe.go
@@ -16,10 +16,66 @@
 
 package erismint
 
+import (
+  "bytes"
+  "fmt"
+
+  db   "github.com/tendermint/go-db"
+  wire "github.com/tendermint/go-wire"
+
+  config      "github.com/eris-ltd/eris-db/config"
+  state       "github.com/eris-ltd/eris-db/manager/eris-mint/state"
+  state_types "github.com/eris-ltd/eris-db/manager/eris-mint/state/types"
+)
+
 type ErisMintPipe struct {
+  erisMintState *state.State
+}
 
+func NewErisMintPipe(moduleConfig *config.ModuleConfig,
+  genesisFile string) (*ErisMintPipe, error) {
+
+  startedState, err := startState(moduleConfig.DataDir,
+    moduleConfig.Config.GetString("db_backend"), genesisFile)
+  if err != nil {
+    return nil, fmt.Errorf("Failed to start state: %v", err)
+  }
+  return &ErisMintPipe{
+    erisMintState: startedState,
+  }, nil
 }
 
-func NewErisMintPipe() *ErisMintPipe {
-  return &ErisMintPipe{}
+//------------------------------------------------------------------------------
+// Start state
+
+func startState(dataDir, backend, genesisFile string) (*state.State, error) {
+  // avoid Tendermints PanicSanity and return a clean error
+  if backend != db.DBBackendMemDB &&
+    backend != db.DBBackendLevelDB {
+    return nil, fmt.Errorf("Dababase backend %s is not supported by %s",
+      backend, GetErisMintVersion)
+  }
+
+  stateDB := db.NewDB("erismint", backend, dataDir)
+  newState := state.LoadState(stateDB)
+  var genesisDoc *state_types.GenesisDoc
+  if newState == nil {
+		genesisDoc, newState = state.MakeGenesisStateFromFile(stateDB, genesisFile)
+		newState.Save()
+		buf, n, err := new(bytes.Buffer), new(int), new(error)
+		wire.WriteJSON(genesisDoc, buf, n, err)
+		stateDB.Set(state_types.GenDocKey, buf.Bytes())
+		if *err != nil {
+			return nil, fmt.Errorf("Unable to write genesisDoc to db: %v", err)
+		}
+	} else {
+		genDocBytes := stateDB.Get(state_types.GenDocKey)
+		err := new(error)
+		wire.ReadJSONPtr(&genesisDoc, genDocBytes, err)
+		if *err != nil {
+			return nil, fmt.Errorf("Unable to read genesisDoc from db: %v", err)
+		}
+	}
+
+  return newState, nil
 }
diff --git a/manager/manager.go b/manager/manager.go
index 07a662f8d47c709ccf08c9a37058c5faf9e5065e..3aab6d88df722b9ec950040c029c2d54dc208a77 100644
--- a/manager/manager.go
+++ b/manager/manager.go
@@ -34,9 +34,11 @@ func NewApplication(moduleConfig *config.ModuleConfig,
   error) {
   switch moduleConfig.Name {
   case "erismint" :
-    if err := erismint.AssertCompatibleConsensus(consensusMinorVersion); err != nil {
+    if err := erismint.AssertCompatibleConsensus(consensusMinorVersion);
+      err != nil {
       return nil, err
     }
+
     return newErisMintPH(moduleConfig)
   }
   return nil, fmt.Errorf("PLACEHOLDER")
diff --git a/server_config.toml b/server_config.toml
index 6d04451f1c88ffa0473a91f3e3ef9b1f9e1a4ef8..3227f7b9bbb99c44ec7c6a142de06ad94b3c7daf 100644
--- a/server_config.toml
+++ b/server_config.toml
@@ -25,6 +25,9 @@ assert_chain_id = "MyChainId"
 # semantic major and minor version
 major_version = 0
 minor_version = 12
+# genesis file, relative path is to eris-db working directory
+genesis_file = "genesis.json"
+
 
 ###############################################################################
 ##
@@ -168,3 +171,6 @@ listener = "tcp://0.0.0.0:46658"
 ################################################################################
 
 [erismint]
+# Database backend to use for ErisMint state database.
+# Supported `leveldb` and `memdb`.
+db_backend = "leveldb"