diff --git a/data/data.go b/data/data.go
index ff0f6fb..f6a03b5 100644
--- a/data/data.go
+++ b/data/data.go
@@ -24,7 +24,7 @@
 var log, dbTraceLog apid.LogService
 var config apid.ConfigService
 
-var dbMap = make(map[string]*sql.DB)
+var dbMap = make(map[string]apid.DB)
 var dbMapSync sync.RWMutex
 
 func CreateDataService() apid.DataService {
@@ -45,11 +45,11 @@
 type dataService struct {
 }
 
-func (d *dataService) DB() (*sql.DB, error) {
+func (d *dataService) DB() (apid.DB, error) {
 	return d.DBForID(commonDBID)
 }
 
-func (d *dataService) DBForID(id string) (db *sql.DB, err error) {
+func (d *dataService) DBForID(id string) (db apid.DB, err error) {
 
 	dbMapSync.RLock()
 	db = dbMap[id]
diff --git a/data/data_test.go b/data/data_test.go
index 2c7db21..5581c5c 100644
--- a/data/data_test.go
+++ b/data/data_test.go
@@ -1,7 +1,6 @@
 package data_test
 
 import (
-	"database/sql"
 	"github.com/30x/apid"
 	"github.com/30x/apid/factory"
 	. "github.com/onsi/ginkgo"
@@ -16,7 +15,7 @@
 )
 
 const (
-	count    = 3000
+	count    = 2000
 	setupSql = `
 		CREATE TABLE IF NOT EXISTS test_1 (id INTEGER PRIMARY KEY, counter TEXT);
 		CREATE TABLE IF NOT EXISTS test_2 (id INTEGER PRIMARY KEY, counter TEXT);
@@ -46,6 +45,25 @@
 		os.RemoveAll(tmpDir)
 	})
 
+	It("should be able to open a new datbase", func () {
+		db, err := apid.Data().DBForID("test")
+		Expect(err).NotTo(HaveOccurred())
+		setup(db)
+
+		var prod string
+		rows, err := db.Query(`SELECT counter FROM test_2 LIMIT 5`)
+		Expect(err).NotTo(HaveOccurred())
+		defer rows.Close()
+		var count = 0
+		for rows.Next() {
+			count++
+			rows.Scan(&prod)
+		}
+		Expect(count).To(Equal(5))
+
+		//db, err := apid.Data().DBForID("test", "someid")
+	})
+
 	It("should handle multi-threaded access", func(done Done) {
 		db, err := apid.Data().DBForID("test")
 		Expect(err).NotTo(HaveOccurred())
@@ -83,7 +101,7 @@
 	time.Sleep(time.Duration(r.Intn(1)) * time.Millisecond)
 }
 
-func setup(db *sql.DB) {
+func setup(db apid.DB) {
 	_, err := db.Exec(setupSql)
 	if err != nil {
 		log.Fatal(err)
@@ -101,7 +119,7 @@
 	tx.Commit()
 }
 
-func read(db *sql.DB, i int) {
+func read(db apid.DB, i int) {
 	var prod string
 	rows, err := db.Query(`SELECT counter FROM test_2 LIMIT 5`)
 	if err != nil {
@@ -116,7 +134,7 @@
 	fmt.Print(".")
 }
 
-func write(db *sql.DB, i int) {
+func write(db apid.DB, i int) {
 	tx, err := db.Begin()
 	defer tx.Rollback()
 	if err != nil {
diff --git a/data_service.go b/data_service.go
index fff6b63..6cc6ea6 100644
--- a/data_service.go
+++ b/data_service.go
@@ -1,8 +1,23 @@
 package apid
 
-import "database/sql"
+import (
+	"database/sql"
+)
 
 type DataService interface {
-	DB() (*sql.DB, error)
-	DBForID(id string) (db *sql.DB, err error)
+	DB() (DB, error)
+	DBForID(id string) (db DB, err error)
+}
+
+type DB interface {
+	Ping() (error)
+	Prepare(query string) (*sql.Stmt, error)
+	Exec(query string, args ...interface{}) (sql.Result, error)
+	Query(query string, args ...interface{}) (*sql.Rows, error)
+	QueryRow(query string, args ...interface{}) *sql.Row
+	Begin() (*sql.Tx, error)
+
+	//Close() error
+	//Stats() sql.DBStats
+	//Driver() driver.Driver
 }
