diff --git a/api/funkwhale_api/federation/serializers.py b/api/funkwhale_api/federation/serializers.py
index 00bb7d45b0b1b98176d74f58075866392a53898c..38efdd3bf76fad277b6a6d9ea7836b18619a9aa8 100644
--- a/api/funkwhale_api/federation/serializers.py
+++ b/api/funkwhale_api/federation/serializers.py
@@ -1,3 +1,4 @@
+import logging
 import urllib.parse
 
 from django.urls import reverse
@@ -21,6 +22,8 @@ AP_CONTEXT = [
     {},
 ]
 
+logger = logging.getLogger(__name__)
+
 
 class ActorSerializer(serializers.Serializer):
     id = serializers.URLField()
@@ -620,6 +623,8 @@ class CollectionPageSerializer(serializers.Serializer):
         for i in raw_items:
             if i.is_valid():
                 valid_items.append(i)
+            else:
+                logger.debug('Invalid item %s: %s', i.data, i.errors)
 
         return valid_items
 
diff --git a/api/funkwhale_api/music/tasks.py b/api/funkwhale_api/music/tasks.py
index f2244d78527c5feff7248b9a40c083ea71498891..aaaa2cdca12539808b6bf1554a946d4dfbb9ae30 100644
--- a/api/funkwhale_api/music/tasks.py
+++ b/api/funkwhale_api/music/tasks.py
@@ -1,3 +1,5 @@
+import os
+
 from django.core.files.base import ContentFile
 
 from dynamic_preferences.registries import global_preferences_registry
@@ -13,6 +15,7 @@ from funkwhale_api.providers.audiofile.tasks import import_track_data_from_path
 from django.conf import settings
 from . import models
 from . import lyrics as lyrics_utils
+from . import utils as music_utils
 
 
 @celery.app.task(name='acoustid.set_on_track_file')
@@ -129,6 +132,10 @@ def _do_import(import_job, replace=False, use_acoustid=True):
     elif not import_job.audio_file and not import_job.source.startswith('file://'):
         # not an implace import, and we have a source, so let's download it
         track_file.download_file()
+    elif not import_job.audio_file and import_job.source.startswith('file://'):
+        # in place import, we set mimetype from extension
+        path, ext = os.path.splitext(import_job.source)
+        track_file.mimetype = music_utils.get_type_from_ext(ext)
     track_file.save()
     import_job.status = 'finished'
     import_job.track_file = track_file
diff --git a/api/funkwhale_api/music/utils.py b/api/funkwhale_api/music/utils.py
index 7a851f7cc35e17681293a9e3a1c24d6cc1e64998..49a63930349a081178bc36c87e73a702e4d9faac 100644
--- a/api/funkwhale_api/music/utils.py
+++ b/api/funkwhale_api/music/utils.py
@@ -63,8 +63,21 @@ def compute_status(jobs):
     return 'finished'
 
 
+AUDIO_EXTENSIONS_AND_MIMETYPE = [
+    ('ogg', 'audio/ogg'),
+    ('mp3', 'audio/mpeg'),
+]
+
+EXTENSION_TO_MIMETYPE = {ext: mt for ext, mt in AUDIO_EXTENSIONS_AND_MIMETYPE}
+MIMETYPE_TO_EXTENSION = {mt: ext for ext, mt in AUDIO_EXTENSIONS_AND_MIMETYPE}
+
+
 def get_ext_from_type(mimetype):
-    mapping = {
-        'audio/ogg': 'ogg',
-        'audio/mpeg': 'mp3',
-    }
+    return MIMETYPE_TO_EXTENSION.get(mimetype)
+
+
+def get_type_from_ext(extension):
+    if extension.startswith('.'):
+        # we remove leading dot
+        extension = extension[1:]
+    return EXTENSION_TO_MIMETYPE.get(extension)
diff --git a/api/tests/music/test_import.py b/api/tests/music/test_import.py
index 65e0242fb013785b0eb21e29ac9259512b281392..fa1c98eb4ca78c7e9fab5861989852687d764f03 100644
--- a/api/tests/music/test_import.py
+++ b/api/tests/music/test_import.py
@@ -243,3 +243,4 @@ def test__do_import_in_place_mbid(factories, tmpfile):
 
     assert bool(tf.audio_file) is False
     assert tf.source == 'file:///test.ogg'
+    assert tf.mimetype == 'audio/ogg'
diff --git a/changes/changelog.d/183.bugfix b/changes/changelog.d/183.bugfix
new file mode 100644
index 0000000000000000000000000000000000000000..03a28e9c394e73fe679c47f573aa879343918dd4
--- /dev/null
+++ b/changes/changelog.d/183.bugfix
@@ -0,0 +1 @@
+Ensure in place imported files get a proper mimetype (#183)