diff --git a/bundle.go b/bundle.go
index 468760c..b4729cf 100644
--- a/bundle.go
+++ b/bundle.go
@@ -172,10 +172,19 @@
 		}
 	}
 
+	cleanTempFile := func(file string) {
+		if os.Remove(file) != nil {
+			log.Warnf("Unable to remove temp file %s", file)
+		}
+	}
+
 	downloadedFile, err := downloadFromURI(r.client, r.blobServerURL, r.blobId)
 
 	if err != nil {
 		log.Errorf("Unable to download blob file blobId=%s err:%v", r.blobId, err)
+		if downloadedFile != "" {
+			go cleanTempFile(downloadedFile)
+		}
 		return err
 	}
 
@@ -184,10 +193,13 @@
 	err = r.bm.dbMan.updateLocalFsLocation(r.blobId, downloadedFile)
 	if err != nil {
 		log.Errorf("updateLocalFsLocation failed: blobId=%s", r.blobId)
+		if downloadedFile != "" {
+			go cleanTempFile(downloadedFile)
+		}
 		return err
 	}
 
-	log.Debugf("bundle downloaded: blobId=%s", r.blobId)
+	log.Debugf("bundle downloaded: blobId=%s filename=%s", r.blobId, downloadedFile)
 
 	// TODO send changed deployments to subscribers (API call with "block")
 	//r.bm.apiMan.addChangedDeployment(dep.ID)
diff --git a/data.go b/data.go
index 607c0ab..f3e59ef 100644
--- a/data.go
+++ b/data.go
@@ -77,7 +77,12 @@
 }
 
 func (dbc *dbManager) initDb() error {
-	_, err := dbc.getDb().Exec(`
+	tx, err := dbc.getDb().Begin()
+	if err != nil {
+		return err
+	}
+	defer tx.Rollback()
+	_, err = tx.Exec(`
 	CREATE TABLE IF NOT EXISTS apid_blob_available (
 		id text primary key,
    		local_fs_location text NOT NULL
@@ -86,7 +91,10 @@
 	if err != nil {
 		return err
 	}
-
+	err = tx.Commit()
+	if err != nil {
+		return err
+	}
 	log.Debug("Database table apid_blob_available created.")
 	return nil
 }
@@ -190,19 +198,21 @@
 }
 
 func (dbc *dbManager) updateLocalFsLocation(blobId, localFsLocation string) error {
-
-	stmt, err := dbc.getDb().Prepare(`
+	txn, err := dbc.getDb().Begin()
+	if err != nil {
+		return err
+	}
+	defer txn.Rollback()
+	_, err = txn.Exec(`
 		INSERT OR IGNORE INTO apid_blob_available (
 		id,
 		local_fs_location
-		) VALUES (?, ?);`)
+		) VALUES (?, ?);`, blobId, localFsLocation)
 	if err != nil {
-		log.Errorf("PREPARE updateLocalFsLocation failed: %v", err)
+		log.Errorf("INSERT apid_blob_available id {%s} local_fs_location {%s} failed", localFsLocation, err)
 		return err
 	}
-	defer stmt.Close()
-
-	_, err = stmt.Exec(blobId, localFsLocation)
+	err = txn.Commit()
 	if err != nil {
 		log.Errorf("UPDATE apid_blob_available id {%s} local_fs_location {%s} failed", localFsLocation, err)
 		return err
diff --git a/data_test.go b/data_test.go
index b3abc2f..58653ef 100644
--- a/data_test.go
+++ b/data_test.go
@@ -162,7 +162,10 @@
 
 //initialize DB for tests
 func initTestDb(db apid.DB) {
-	_, err := db.Exec(`
+	tx, err := db.Begin()
+	Expect(err).Should(Succeed())
+	defer tx.Rollback()
+	_, err = tx.Exec(`
 		CREATE TABLE metadata_runtime_entity_metadata (
 		id text,
 		organization_id text,
@@ -183,7 +186,7 @@
 	Expect(err).Should(Succeed())
 
 	// ready blob, empty resource
-	_, err = db.Exec(`
+	_, err = tx.Exec(`
 		INSERT INTO "metadata_runtime_entity_metadata" VALUES(
 		'1dc4895e-6494-4b59-979f-5f4c89c073b4',
 		'73fcac6c-5d9f-44c1-8db0-333efda3e6e8',
@@ -204,7 +207,7 @@
 	Expect(err).Should(Succeed())
 
 	// ready blob, ready resource
-	_, err = db.Exec(`
+	_, err = tx.Exec(`
 		INSERT INTO "metadata_runtime_entity_metadata" VALUES(
 		'319963ff-217e-4ecc-8d6e-c3665e962d1e',
 		'73fcac6c-5d9f-44c1-8db0-333efda3e6e8',
@@ -225,7 +228,7 @@
 	Expect(err).Should(Succeed())
 
 	// ready blob, unready resource
-	_, err = db.Exec(`
+	_, err = tx.Exec(`
 		INSERT INTO "metadata_runtime_entity_metadata" VALUES(
 		'3af44bb7-0a74-4283-860c-3561e6c19132',
 		'73fcac6c-5d9f-44c1-8db0-333efda3e6e8',
@@ -246,7 +249,7 @@
 	Expect(err).Should(Succeed())
 
 	// unready blob, empty resource
-	_, err = db.Exec(`
+	_, err = tx.Exec(`
 		INSERT INTO "metadata_runtime_entity_metadata" VALUES(
 		'd5ffd9db-4795-43eb-b645-d2a0b6c8ac6a',
 		'73fcac6c-5d9f-44c1-8db0-333efda3e6e8',
@@ -267,7 +270,7 @@
 	Expect(err).Should(Succeed())
 
 	// unready blob, ready resource
-	_, err = db.Exec(`
+	_, err = tx.Exec(`
 		INSERT INTO "metadata_runtime_entity_metadata" VALUES(
 		'84ac8d68-b3d1-4bcc-ad0d-c6a0ed67e16c',
 		'73fcac6c-5d9f-44c1-8db0-333efda3e6e8',
@@ -288,7 +291,7 @@
 	Expect(err).Should(Succeed())
 
 	// unready blob, unready resource
-	_, err = db.Exec(`
+	_, err = tx.Exec(`
 		INSERT INTO "metadata_runtime_entity_metadata" VALUES(
 		'3ecd351c-1173-40bf-b830-c194e5ef9038',
 		'73fcac6c-5d9f-44c1-8db0-333efda3e6e8',
@@ -307,4 +310,5 @@
 		);
 	`)
 	Expect(err).Should(Succeed())
+	Expect(tx.Commit()).Should(Succeed())
 }
