diff --git a/api/funkwhale_api/manage/serializers.py b/api/funkwhale_api/manage/serializers.py
index c72e015bf97095c6206e08c343ea96b471ce3697..67e0178e0e4688679463b308bf532f458fa51037 100644
--- a/api/funkwhale_api/manage/serializers.py
+++ b/api/funkwhale_api/manage/serializers.py
@@ -44,12 +44,14 @@ class ManageUserSimpleSerializer(serializers.ModelSerializer):
 class ManageUserSerializer(serializers.ModelSerializer):
     permissions = PermissionsSerializer(source="*")
     upload_quota = serializers.IntegerField(allow_null=True)
+    actor = serializers.SerializerMethodField()
 
     class Meta:
         model = users_models.User
         fields = (
             "id",
             "username",
+            "actor",
             "email",
             "name",
             "is_active",
@@ -82,6 +84,10 @@ class ManageUserSerializer(serializers.ModelSerializer):
             )
         return instance
 
+    def get_actor(self, obj):
+        if obj.actor:
+            return ManageBaseActorSerializer(obj.actor).data
+
 
 class ManageInvitationSerializer(serializers.ModelSerializer):
     users = ManageUserSimpleSerializer(many=True, required=False)
diff --git a/api/funkwhale_api/manage/views.py b/api/funkwhale_api/manage/views.py
index fb9ceabc5d5a633fea880fd63497442b2a7aa431..c788dd96bcaf4582c2efb6446c83327b39d9214b 100644
--- a/api/funkwhale_api/manage/views.py
+++ b/api/funkwhale_api/manage/views.py
@@ -291,7 +291,7 @@ class ManageUserViewSet(
     mixins.UpdateModelMixin,
     viewsets.GenericViewSet,
 ):
-    queryset = users_models.User.objects.all().order_by("-id")
+    queryset = users_models.User.objects.all().select_related("actor").order_by("-id")
     serializer_class = serializers.ManageUserSerializer
     filterset_class = filters.ManageUserFilterSet
     required_scope = "instance:users"
diff --git a/api/funkwhale_api/music/metadata.py b/api/funkwhale_api/music/metadata.py
index 55044dbc7f98e88d2decc1c756a7f0488bcfdac9..f0ea67b1aa66003be34cd0572f6e79c10c8064f4 100644
--- a/api/funkwhale_api/music/metadata.py
+++ b/api/funkwhale_api/music/metadata.py
@@ -13,6 +13,8 @@ from rest_framework.compat import Mapping
 
 logger = logging.getLogger(__name__)
 NODEFAULT = object()
+# default title used when imported tracks miss the `Album` tag, see #122
+UNKWOWN_ALBUM = "[Unknown Album]"
 
 
 class TagNotFound(KeyError):
@@ -425,9 +427,11 @@ class AlbumField(serializers.Field):
 
     def to_internal_value(self, data):
         try:
-            title = data.get("album")
+            title = data.get("album") or ""
         except TagNotFound:
-            raise serializers.ValidationError("Missing album tag")
+            title = ""
+
+        title = title.strip() or UNKWOWN_ALBUM
         final = {
             "title": title,
             "release_date": data.get("date", None),
diff --git a/api/funkwhale_api/music/utils.py b/api/funkwhale_api/music/utils.py
index 571bc4ddd42509320a9ec4ec8a9f3e503d9708da..84f55dda7a983f069643c6e05188c438bc91e82f 100644
--- a/api/funkwhale_api/music/utils.py
+++ b/api/funkwhale_api/music/utils.py
@@ -31,6 +31,7 @@ def compute_status(jobs):
 
 AUDIO_EXTENSIONS_AND_MIMETYPE = [
     ("ogg", "audio/ogg"),
+    ("opus", "audio/opus"),
     ("mp3", "audio/mpeg"),
     ("flac", "audio/x-flac"),
     ("flac", "audio/flac"),
diff --git a/api/tests/music/test_metadata.py b/api/tests/music/test_metadata.py
index 52c4e302685b7bf0aa178676f321c29bf551e1a8..539fa49a2f2b26a3a6818d2d4d23ace81f910122 100644
--- a/api/tests/music/test_metadata.py
+++ b/api/tests/music/test_metadata.py
@@ -539,6 +539,34 @@ def test_serializer_album_artist_missing():
     assert serializer.validated_data == expected
 
 
+@pytest.mark.parametrize(
+    "data",
+    [
+        # no album tag
+        {"title": "Track", "artist": "Artist"},
+        # empty/null values
+        {"title": "Track", "artist": "Artist", "album": ""},
+        {"title": "Track", "artist": "Artist", "album": " "},
+        {"title": "Track", "artist": "Artist", "album": None},
+    ],
+)
+def test_serializer_album_default_title_when_missing_or_empty(data):
+    expected = {
+        "title": "Track",
+        "artists": [{"name": "Artist", "mbid": None}],
+        "album": {
+            "title": metadata.UNKWOWN_ALBUM,
+            "mbid": None,
+            "release_date": None,
+            "artists": [],
+        },
+        "cover_data": None,
+    }
+    serializer = metadata.TrackMetadataSerializer(data=metadata.FakeMetadata(data))
+    assert serializer.is_valid(raise_exception=True) is True
+    assert serializer.validated_data == expected
+
+
 @pytest.mark.parametrize(
     "field_name", ["copyright", "license", "mbid", "position", "disc_number"]
 )
diff --git a/changes/changelog.d/122.enhancement b/changes/changelog.d/122.enhancement
new file mode 100644
index 0000000000000000000000000000000000000000..2776824c7406e3adb2af3bd77c3397ed0f0c7cac
--- /dev/null
+++ b/changes/changelog.d/122.enhancement
@@ -0,0 +1 @@
+Support for importing files with no album tag (#122)
diff --git a/changes/changelog.d/868.enhancement b/changes/changelog.d/868.enhancement
new file mode 100644
index 0000000000000000000000000000000000000000..13fc3953010bc4bdae53552ba19134ef7e0424f4
--- /dev/null
+++ b/changes/changelog.d/868.enhancement
@@ -0,0 +1 @@
+Added opus to the list of supported mimetypes and extensions (#868)
diff --git a/changes/changelog.d/869.bugfix b/changes/changelog.d/869.bugfix
new file mode 100644
index 0000000000000000000000000000000000000000..7d56f3175a19da41b146b8f68fd18fe61b147652
--- /dev/null
+++ b/changes/changelog.d/869.bugfix
@@ -0,0 +1 @@
+Fixed broken user admin for users with non-digit or letters in their username (#869)
diff --git a/front/src/components/manage/users/UsersTable.vue b/front/src/components/manage/users/UsersTable.vue
index ee1d3110b2c800e7f1445718ff26f484af82b23e..a508f5be9469050d834d5f15a897dabf63b3d6c2 100644
--- a/front/src/components/manage/users/UsersTable.vue
+++ b/front/src/components/manage/users/UsersTable.vue
@@ -45,7 +45,8 @@
         </template>
         <template slot="row-cells" slot-scope="scope">
           <td>
-            <router-link :to="{name: 'manage.moderation.accounts.detail', params: {id: scope.obj.full_username }}">{{ scope.obj.username }}</router-link>
+            <router-link v-if="scope.obj.actor" :to="{name: 'manage.moderation.accounts.detail', params: {id: scope.obj.actor.full_username }}">{{ scope.obj.username }}</router-link>
+            <router-link v-else :to="{name: 'manage.moderation.accounts.detail', params: {id: scope.obj.full_username }}">{{ scope.obj.username }}</router-link>
           </td>
           <td>
             <span>{{ scope.obj.email }}</span>