diff --git a/ethereum.go b/ethereum.go
index 2500892f0b08d906072fffce3ab86acf83ee3cfb..cc3f1695b320abcd810c860d4c4c20b507c06c64 100644
--- a/ethereum.go
+++ b/ethereum.go
@@ -33,7 +33,7 @@ type Ethereum struct {
 	quit         chan bool
 	// DB interface
 	//db *ethdb.LDBDatabase
-	db *ethdb.MemDatabase
+	db ethutil.Database
 	// Block manager for processing new blocks and managing the block chain
 	BlockManager *ethchain.BlockManager
 	// The transaction pool. Transaction can be pushed on this pool
@@ -52,10 +52,14 @@ type Ethereum struct {
 	serverCaps Caps
 
 	nat NAT
+
+	// Specifies the desired amount of maximum peers
+	MaxPeers int
 }
 
 func New(caps Caps, usePnp bool) (*Ethereum, error) {
-	db, err := ethdb.NewMemDatabase()
+	db, err := ethdb.NewLDBDatabase()
+	//db, err := ethdb.NewMemDatabase()
 	if err != nil {
 		return nil, err
 	}
@@ -79,6 +83,7 @@ func New(caps Caps, usePnp bool) (*Ethereum, error) {
 		Nonce:        nonce,
 		serverCaps:   caps,
 		nat:          nat,
+		MaxPeers:     5,
 	}
 	ethereum.TxPool = ethchain.NewTxPool()
 	ethereum.TxPool.Speaker = ethereum
@@ -93,7 +98,7 @@ func New(caps Caps, usePnp bool) (*Ethereum, error) {
 func (s *Ethereum) AddPeer(conn net.Conn) {
 	peer := NewPeer(conn, s, true)
 
-	if peer != nil {
+	if peer != nil && s.peers.Len() < s.MaxPeers {
 		s.peers.PushBack(peer)
 		peer.Start()
 	}
@@ -263,9 +268,10 @@ func (s *Ethereum) Stop() {
 
 	close(s.quit)
 
-	s.shutdownChan <- true
-
 	s.TxPool.Stop()
+	s.BlockManager.Stop()
+
+	s.shutdownChan <- true
 }
 
 // This function will wait for a shutdown and resumes main thread execution