diff --git a/data/data.go b/data/data.go
index 537ffe0..8eded28 100644
--- a/data/data.go
+++ b/data/data.go
@@ -63,6 +63,18 @@
 	return d.db.Ping()
 }
 
+func (d *ApidDb) SetMaxIdleConns(n int) {
+	 d.db.SetMaxIdleConns(n)
+}
+
+func (d *ApidDb) SetMaxOpenConns(n int) {
+	d.db.SetMaxOpenConns(n)
+}
+
+func (d *ApidDb) SetConnMaxLifetime(du time.Duration) {
+	d.db.SetConnMaxLifetime(du)
+}
+
 func (d *ApidDb) Prepare(query string) (*sql.Stmt, error) {
 	return d.db.Prepare(query)
 }
@@ -83,6 +95,7 @@
 	d.mutex.Lock()
 	tx, err := d.db.Begin()
 	if err != nil {
+		d.mutex.Unlock()
 		return nil, err
 	}
 	return &Tx{
diff --git a/data/data_test.go b/data/data_test.go
index 71dfb26..e7d5478 100644
--- a/data/data_test.go
+++ b/data/data_test.go
@@ -48,7 +48,19 @@
 		_, err = apid.Data().DBVersionForID("common", "base")
 		Expect(err).To(HaveOccurred())
 	})
+	It("DB Begin Txn failure handled", func() {
+		var numRows int
+		db, err := apid.Data().DBForID("test")
+		db.SetMaxOpenConns(1)
+		db.SetMaxIdleConns(1)
+		err = db.QueryRow(`SELECT count(*) FROM test_2`).Scan(&numRows)
+		Expect(err).To(HaveOccurred())
 
+		tx, err := db.Begin()
+		Expect(err).NotTo(HaveOccurred())
+		tx.Commit()
+
+	})
 	It("should be able to change versions of a datbase", func() {
 		var versions []string
 		var dbs []apid.DB
@@ -84,6 +96,8 @@
 
 	It("should handle concurrent read & serialized write", func() {
 		db, err := apid.Data().DBForID("test")
+		db.SetMaxOpenConns(1)
+		db.SetMaxIdleConns(1)
 		Expect(err).NotTo(HaveOccurred())
 		setup(db)
 		finished := make(chan bool, count+1)
@@ -104,11 +118,14 @@
 
 		for i := 0; i < count+1; i++ {
 			<-finished
+			Expect(db.Stats().OpenConnections).To(Equal(1))
 		}
 	}, 10)
 
 	It("should handle concurrent write", func() {
 		db, err := apid.Data().DBForID("test_write")
+		db.SetMaxOpenConns(1)
+		db.SetMaxIdleConns(1)
 		Expect(err).NotTo(HaveOccurred())
 		setup(db)
 		finished := make(chan bool, count)
@@ -122,6 +139,7 @@
 
 		for i := 0; i < count; i++ {
 			<-finished
+			Expect(db.Stats().OpenConnections).To(Equal(1))
 		}
 	}, 10)
 })
diff --git a/data_service.go b/data_service.go
index c606e10..355566d 100644
--- a/data_service.go
+++ b/data_service.go
@@ -17,6 +17,7 @@
 import (
 	"context"
 	"database/sql"
+	"time"
 )
 
 type DataService interface {
@@ -40,6 +41,9 @@
 	QueryRow(query string, args ...interface{}) *sql.Row
 	Begin() (Tx, error)
 	Stats() sql.DBStats
+	SetConnMaxLifetime(d time.Duration)
+	SetMaxIdleConns(n int)
+	SetMaxOpenConns(n int)
 	//Close() error
 	//Stats() sql.DBStats
 	//Driver() driver.Driver
