diff --git a/blenderkit/ratings.py b/blenderkit/ratings.py
index e06b3d49d1c03fb53ff59863ca973b28370e7758..c705590534f58166678a3e77395bea1ddedc8654 100644
--- a/blenderkit/ratings.py
+++ b/blenderkit/ratings.py
@@ -426,7 +426,7 @@ class FastRateMenu(Operator):
     def poll(cls, context):
         scene = bpy.context.scene
         ui_props = scene.blenderkitUI
-        return ui_props.active_index > -1
+        return True;
 
     def draw(self, context):
         layout = self.layout
@@ -500,6 +500,8 @@ class FastRateMenu(Operator):
             self.asset_id = asset_data['id']
             self.asset_type = asset_data['assetType']
 
+        if self.asset_id == '':
+            return {'CANCELLED'}
         self.message = f"Rate asset {self.asset_name}"
         wm = context.window_manager
 
diff --git a/blenderkit/ui_panels.py b/blenderkit/ui_panels.py
index 0c460f2966d93a843b83d6e947e434d04e226eb6..4ccddcfe998e984421dfe58a5bedb155f719b05b 100644
--- a/blenderkit/ui_panels.py
+++ b/blenderkit/ui_panels.py
@@ -1285,6 +1285,7 @@ def draw_asset_context_menu(layout, context, asset_data, from_panel=False):
             row.operator_context = 'INVOKE_DEFAULT'
             op = layout.operator('wm.blenderkit_fast_metadata', text='Fast Edit Metadata')
             op.asset_id = asset_data['id']
+            op.asset_type = asset_data['assetType']
 
         if author_id == str(profile['user']['id']):
             row = layout.row()
diff --git a/blenderkit/upload.py b/blenderkit/upload.py
index 284d6359bc8d6b9b7a339d97dd8a9c89a6db1f71..b2395f686ab01acaaa13fffb56115aadae145d72 100644
--- a/blenderkit/upload.py
+++ b/blenderkit/upload.py
@@ -596,6 +596,11 @@ class FastMetadata(bpy.types.Operator):
         description="Unique name of the asset (hidden)",
         default=""
     )
+    asset_type: StringProperty(
+        name="Asset Type",
+        description="Asset Type",
+        default=""
+    )
     name: StringProperty(
         name="Name",
         description="Main name of the asset",
@@ -658,7 +663,7 @@ class FastMetadata(bpy.types.Operator):
     def poll(cls, context):
         scene = bpy.context.scene
         ui_props = scene.blenderkitUI
-        return can_edit_asset(active_index=ui_props.active_index)
+        return True
 
     def draw(self, context):
         layout = self.layout
@@ -717,9 +722,9 @@ class FastMetadata(bpy.types.Operator):
             sr = bpy.context.window_manager['search results']
             asset_data = dict(sr[ui_props.active_index])
         else:
-            for result in bpy.context.window_manager['search results']:
-                if result['id'] == self.asset_id:
-                    asset_data = dict(result)
+
+            active_asset = utils.get_active_asset_by_type(asset_type = self.asset_type)
+            asset_data = active_asset.get('asset_data')
 
         if not can_edit_asset(asset_data=asset_data):
             return {'CANCELLED'}
diff --git a/blenderkit/utils.py b/blenderkit/utils.py
index d45ac1f5e5cfb7683a93fd47d473a5a2fe62b1f9..7abc07d581de888670e21ea8c357fe1142103441 100644
--- a/blenderkit/utils.py
+++ b/blenderkit/utils.py
@@ -181,6 +181,27 @@ def get_search_props():
     return props
 
 
+def get_active_asset_by_type(asset_type = 'model'):
+    asset_type =asset_type.lower()
+    if asset_type == 'model':
+        if bpy.context.view_layer.objects.active is not None:
+            ob = get_active_model()
+            return ob
+    if asset_type == 'scene':
+        return bpy.context.scene
+    if asset_type == 'hdr':
+        return get_active_HDR()
+    if asset_type == 'material':
+        if bpy.context.view_layer.objects.active is not None and bpy.context.active_object.active_material is not None:
+            return bpy.context.active_object.active_material
+    if asset_type == 'texture':
+        return None
+    if asset_type == 'brush':
+        b = get_active_brush()
+        if b is not None:
+            return b
+    return None
+
 def get_active_asset():
     scene = bpy.context.scene
     ui_props = scene.blenderkitUI