diff --git a/CHANGELOG.md b/CHANGELOG.md
index d141fa569e24e44a05dd118a28df7b81d00f66d7..cb853f8548d99620dc1942a3ee46e28631007c77 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -24,6 +24,7 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
 * Fixed a download inefficiency where remote downloads could use extra bandwidth.
 * Fixed a problem where secondary imports can never finish.
 * Fixed imports not handling duplicate media IDs.
+* Fixed some database connection errors not being handled correctly.
 
 ## [1.2.4] - March 5th, 2021
 
diff --git a/controllers/download_controller/download_controller.go b/controllers/download_controller/download_controller.go
index 5727b2b68ed884ffb28bfe4b0b2de926fa240305..d67623ff8f7fc8756e821047d1cd4e470541bce1 100644
--- a/controllers/download_controller/download_controller.go
+++ b/controllers/download_controller/download_controller.go
@@ -182,6 +182,10 @@ func FindMinimalMediaRecord(origin string, mediaId string, downloadRemote bool,
 					ctx.Log.Warn("Media not found")
 					return nil, common.ErrMediaNotFound
 				}
+			} else {
+				// We don't even want to attempt a download - something very wrong happened
+				ctx.Log.Error("Database error trying to get media:", err.Error())
+				return nil, err
 			}
 
 			if !downloadRemote {
@@ -263,6 +267,10 @@ func FindMediaRecord(origin string, mediaId string, downloadRemote bool, ctx rco
 						ctx.Log.Warn("Media not found")
 						return nil, common.ErrMediaNotFound
 					}
+				} else {
+					// We don't even want to attempt a download - something very wrong happened
+					ctx.Log.Error("Database error trying to get media:", err.Error())
+					return nil, err
 				}
 
 				if !downloadRemote {
diff --git a/controllers/upload_controller/upload_controller.go b/controllers/upload_controller/upload_controller.go
index 8dda069944f4212525733cce0be0cae139263aae..90060917add91c7d60acc7b7d82d6c7c526ecd47 100644
--- a/controllers/upload_controller/upload_controller.go
+++ b/controllers/upload_controller/upload_controller.go
@@ -267,6 +267,16 @@ func StoreDirect(f *AlreadyUploadedFile, contents io.ReadCloser, expectedSize in
 			return nil, common.ErrMediaQuarantined
 		}
 
+		// Double check that we're not about to try and store a record we know about
+		for _, knownRecord := range records {
+			if knownRecord.Origin == origin && knownRecord.MediaId == mediaId {
+				ctx.Log.Info("Duplicate media record found - returning unaltered record")
+				ds.DeleteObject(info.Location) // delete temp object
+				trackUploadAsLastAccess(ctx, knownRecord)
+				return knownRecord, nil
+			}
+		}
+
 		media := record
 		media.Origin = origin
 		media.MediaId = mediaId
diff --git a/storage/datastore/datastore.go b/storage/datastore/datastore.go
index e3e6d81b434c979090d84709eb26fd3dbf61bbf9..fb2e709c3da9bcdd4babbbe433724c1d7c8b9224 100644
--- a/storage/datastore/datastore.go
+++ b/storage/datastore/datastore.go
@@ -113,6 +113,7 @@ func PickDatastore(forKind string, ctx rcontext.RequestContext) (*DatastoreRef,
 
 		ds, err := mediaStore.GetDatastoreByUri(GetUriForDatastore(dsConf))
 		if err != nil {
+			ctx.Log.Error("Error getting datastore: ", err.Error())
 			continue
 		}
 
@@ -121,6 +122,7 @@ func PickDatastore(forKind string, ctx rcontext.RequestContext) (*DatastoreRef,
 		if len(confDatastores) > 1 {
 			size, err = estimatedDatastoreSize(ds, ctx)
 			if err != nil {
+				ctx.Log.Error("Error estimating datastore size for ", ds.DatastoreId, ": ", err.Error())
 				continue
 			}
 		}