diff --git a/blenderkit/__init__.py b/blenderkit/__init__.py
index d64ea13325c270d22a829ddc3368221ec2a3c49c..c883482360df2a2d4f6a7afdd7f78718941cceaa 100644
--- a/blenderkit/__init__.py
+++ b/blenderkit/__init__.py
@@ -1527,6 +1527,11 @@ class BlenderKitAddonPreferences(AddonPreferences):
                                min=0,
                                max=20000)
 
+    first_run: BoolProperty(
+        name="First run",
+        description="Detects if addon was already registered/run.",
+        default=True
+    )
     # allow_proximity : BoolProperty(
     #     name="allow proximity data reports",
     #     description="This sends anonymized proximity data \n \
diff --git a/blenderkit/search.py b/blenderkit/search.py
index bf430d9138119c1f8b664a1fb78e988949c0b1b7..94b0c94cbfe23bc7abd3e50a7d118723fe02e67f 100644
--- a/blenderkit/search.py
+++ b/blenderkit/search.py
@@ -130,35 +130,38 @@ def fetch_server_data():
 first_time = True
 last_clipboard = ''
 
+def check_clipboard():
+    # clipboard monitoring to search assets from web
+    global last_clipboard
+    if bpy.context.window_manager.clipboard != last_clipboard:
+        last_clipboard = bpy.context.window_manager.clipboard
+        instr = 'asset_base_id:'
+        # first check if contains asset id, then asset type
+        if last_clipboard[:len(instr)] == instr:
+            atstr = 'asset_type:'
+            ati = last_clipboard.find(atstr)
+            # this only checks if the asset_type keyword is there but let's the keywords update function do the parsing.
+            if ati > -1:
+                search_props = utils.get_search_props()
+                search_props.search_keywords = last_clipboard
+                # don't run search after this - assigning to keywords runs the search_update function.
 
 @bpy.app.handlers.persistent
 def timer_update():
     # this makes a first search after opening blender. showing latest assets.
     global first_time
     preferences = bpy.context.preferences.addons['blenderkit'].preferences
-    if first_time:
+    if first_time:# first time
         first_time = False
-        if preferences.show_on_start:
+        if preferences.show_on_start or preferences.first_run:
             search()
+            preferences.first_run = False
         if preferences.tips_on_start:
             ui.get_largest_3dview()
             ui.update_ui_size(ui.active_area, ui.active_region)
             ui.add_report(text='BlenderKit Tip: ' + random.choice(rtips), timeout=12, color=colors.GREEN)
 
-    # clipboard monitoring to search assets from web
-    global last_clipboard
-    if bpy.context.window_manager.clipboard != last_clipboard:
-        last_clipboard =  bpy.context.window_manager.clipboard
-        instr = 'asset_base_id:'
-        # first check if contains asset id, then asset type
-        if last_clipboard[:len(instr)] == instr:
-            atstr = 'asset_type:'
-            ati = last_clipboard.find(atstr)
-            #this only checks if the asset_type keyword is there but let's the keywords update function do the parsing.
-            if ati > -1:
-                search_props = utils.get_search_props()
-                search_props.search_keywords = last_clipboard
-                # don't run search after this - assigning to keywords runs the search_update function.
+    check_clipboard()
 
     global search_threads
     # don't do anything while dragging - this could switch asset during drag, and make results list length different,
diff --git a/blenderkit/ui.py b/blenderkit/ui.py
index b0753a089e26d35fc3eb042b21dcec83d2e30cb6..f5efae7d5949d7d99109b4b5034c1f89b82f843b 100644
--- a/blenderkit/ui.py
+++ b/blenderkit/ui.py
@@ -1288,10 +1288,7 @@ class AssetBarOperator(bpy.types.Operator):
 
         update_ui_size(self.area, self.region)
 
-        if context.region != self.region:
-            print(time.time(), 'pass through because of region')
-            print(context.region.type, self.region.type)
-            return {'PASS_THROUGH'}
+
 
         # this was here to check if sculpt stroke is running, but obviously that didn't help,
         #  since the RELEASE event is cought by operator and thus there is no way to detect a stroke has ended...
@@ -1313,6 +1310,11 @@ class AssetBarOperator(bpy.types.Operator):
             ui_props.draw_tooltip = False
             return {'CANCELLED'}
 
+        if context.region != self.region:
+            # print(time.time(), 'pass through because of region')
+            # print(context.region.type, self.region.type)
+            return {'PASS_THROUGH'}
+
         if ui_props.down_up == 'UPLOAD':
 
             ui_props.mouse_x = 0
@@ -1504,8 +1506,8 @@ class AssetBarOperator(bpy.types.Operator):
                     asset_search_index = ui_props.active_index
                     asset_data = sr[asset_search_index]
                     if not asset_data['can_download']:
-                        message = 'Asset locked. Find out how to unlock Everything and ...'
-                        link_text = 'support all BlenderKit artists.'
+                        message = "Let's support asset creators and Blender development."
+                        link_text = 'Unlock the asset.'
                         url = paths.get_bkit_url() + '/get-blenderkit/' + asset_data['id'] + '/?from_addon'
                         bpy.ops.wm.blenderkit_url_dialog('INVOKE_REGION_WIN', url=url, message=message,
                                                          link_text=link_text)
diff --git a/blenderkit/ui_panels.py b/blenderkit/ui_panels.py
index cacc1df40222741584da0b66cf21769aa2f7ec6e..0330bf887e144bafc154811dd09bc9afc52e8320 100644
--- a/blenderkit/ui_panels.py
+++ b/blenderkit/ui_panels.py
@@ -470,13 +470,20 @@ class VIEW3D_PT_blenderkit_profile(Panel):
 
                 # plan information
 
-                # pcoll = icons.icon_collections["main"]
-                # my_icon = pcoll['free']
-                # row = layout.row()
-                # row.label(text='My plan:')
-                # row.label(text='Free plan', icon_value=my_icon.icon_id)
-                # layout.operator("wm.url_open", text="Change plan",
-                #                 icon='URL').url = paths.get_bkit_url() + paths.BLENDERKIT_PLANS
+                if me.get('currentPlanName') is not None:
+                    pn = me['currentPlanName']
+                    pcoll = icons.icon_collections["main"]
+                    if pn == 'Free':
+                        my_icon = pcoll['free']
+                    else:
+                        my_icon = pcoll['full']
+
+                    row = layout.row()
+                    row.label(text='My plan:')
+                    row.label(text='%s plan' % pn, icon_value=my_icon.icon_id)
+                    if pn =='Free':
+                        layout.operator("wm.url_open", text="Change plan",
+                            icon='URL').url = paths.get_bkit_url() + paths.BLENDERKIT_PLANS
 
                 # storage statistics
                 # if me.get('sumAssetFilesSize') is not None:  # TODO remove this when production server has these too.