diff --git a/src/addon/block/activitymodules/components/activitymodules/addon-block-activitymodules.html b/src/addon/block/activitymodules/components/activitymodules/addon-block-activitymodules.html
index 02986ea4d..8d42ff51c 100644
--- a/src/addon/block/activitymodules/components/activitymodules/addon-block-activitymodules.html
+++ b/src/addon/block/activitymodules/components/activitymodules/addon-block-activitymodules.html
@@ -1,7 +1,7 @@
+<ion-item-divider color="light">
+    <h2>{{ 'addon.block_activitymodules.pluginname' | translate }}</h2>
+</ion-item-divider>
 <core-loading [hideUntil]="loaded" class="core-loading-center">
-    <ion-item-divider color="light">
-        <h2>{{ 'addon.block_activitymodules.pluginname' | translate }}</h2>
-    </ion-item-divider>
     <a ion-item text-wrap *ngFor="let entry of entries" class="item-media" detail-none [navPush]="'CoreCourseListModTypePage'" [navParams]="{title: entry.name, courseId: instanceId, modName: entry.modName}">
         <img item-start [src]="entry.icon" alt="" role="presentation" class="core-module-icon">
         <core-format-text [text]="entry.name"></core-format-text>
diff --git a/src/addon/block/activitymodules/providers/block-handler.ts b/src/addon/block/activitymodules/providers/block-handler.ts
index df211ecec..0024324c9 100644
--- a/src/addon/block/activitymodules/providers/block-handler.ts
+++ b/src/addon/block/activitymodules/providers/block-handler.ts
@@ -13,28 +13,20 @@
 // limitations under the License.
 
 import { Injectable, Injector } from '@angular/core';
-import { CoreBlockHandler, CoreBlockHandlerData } from '@core/block/providers/delegate';
+import { CoreBlockHandlerData } from '@core/block/providers/delegate';
 import { AddonBlockActivityModulesComponent } from '../components/activitymodules/activitymodules';
+import { CoreBlockBaseHandler } from '@core/block/classes/base-block-handler';
 
 /**
- * Course nav handler.
+ * Block handler.
  */
 @Injectable()
-export class AddonBlockActivityModulesHandler implements CoreBlockHandler {
-    name = 'AddonBlockActivityModulesHandler';
+export class AddonBlockActivityModulesHandler extends CoreBlockBaseHandler {
+    name = 'AddonBlockActivityModules';
     blockName = 'activity_modules';
 
     constructor() {
-        // Nothing to do.
-    }
-
-    /**
-     * Check if the handler is enabled on a site level.
-     *
-     * @return {boolean} Whether or not the handler is enabled on a site level.
-     */
-    isEnabled(): boolean | Promise<boolean> {
-        return true;
+        super();
     }
 
     /**
diff --git a/src/addon/block/myoverview/components/myoverview/addon-block-myoverview.html b/src/addon/block/myoverview/components/myoverview/addon-block-myoverview.html
index 07554c0ac..aad7b8ca0 100644
--- a/src/addon/block/myoverview/components/myoverview/addon-block-myoverview.html
+++ b/src/addon/block/myoverview/components/myoverview/addon-block-myoverview.html
@@ -1,14 +1,14 @@
 <!-- Buttons to add to the header. -->
 <core-navbar-buttons end>
-     <button [hidden]="!showFilterSwitchButton()" ion-button icon-only [attr.aria-label]="'core.courses.filtermycourses' | translate" (click)="switchFilter()">
+     <button [hidden]="!loaded || !showFilterSwitchButton()" ion-button icon-only [attr.aria-label]="'core.courses.filtermycourses' | translate" (click)="switchFilter()">
         <ion-icon name="funnel"></ion-icon>
     </button>
 </core-navbar-buttons>
 
+<ion-item-divider color="light">
+    <h2>{{ 'addon.block_myoverview.pluginname' | translate }}</h2>
+</ion-item-divider>
 <core-loading [hideUntil]="loaded" class="core-loading-center">
-    <ion-item-divider color="light">
-        <h2>{{ 'addon.block_myoverview.pluginname' | translate }}</h2>
-    </ion-item-divider>
     <div padding ion-row justify-content-end [hidden]="showFilter">
         <!-- "Time" selector. -->
         <ion-col [hidden]="!showSelectorFilter">
diff --git a/src/addon/block/myoverview/providers/block-handler.ts b/src/addon/block/myoverview/providers/block-handler.ts
index 995bd981c..5f723467c 100644
--- a/src/addon/block/myoverview/providers/block-handler.ts
+++ b/src/addon/block/myoverview/providers/block-handler.ts
@@ -13,20 +13,22 @@
 // limitations under the License.
 
 import { Injectable, Injector } from '@angular/core';
-import { CoreBlockHandler, CoreBlockHandlerData } from '@core/block/providers/delegate';
+import { CoreSitesProvider } from '@providers/sites';
+import { CoreBlockHandlerData } from '@core/block/providers/delegate';
 import { CoreCoursesProvider } from '@core/courses/providers/courses';
 import { AddonBlockMyOverviewComponent } from '../components/myoverview/myoverview';
+import { CoreBlockBaseHandler } from '@core/block/classes/base-block-handler';
 
 /**
- * Course nav handler.
+ * Block  handler.
  */
 @Injectable()
-export class AddonBlockMyOverviewHandler implements CoreBlockHandler {
-    name = 'AddonBlockMyOverviewHandler';
+export class AddonBlockMyOverviewHandler extends CoreBlockBaseHandler {
+    name = 'AddonBlockMyOverview';
     blockName = 'myoverview';
 
-    constructor(private coursesProvider: CoreCoursesProvider) {
-        // Nothing to do.
+    constructor(private coursesProvider: CoreCoursesProvider, private sitesProvider: CoreSitesProvider) {
+        super();
     }
 
     /**
@@ -35,7 +37,8 @@ export class AddonBlockMyOverviewHandler implements CoreBlockHandler {
      * @return {boolean} Whether or not the handler is enabled on a site level.
      */
     isEnabled(): boolean | Promise<boolean> {
-        return !this.coursesProvider.isMyCoursesDisabledInSite();
+        return this.sitesProvider.getCurrentSite().isVersionGreaterEqualThan('3.6') ||
+            !this.coursesProvider.isMyCoursesDisabledInSite();
     }
 
     /**
diff --git a/src/addon/block/sitemainmenu/components/sitemainmenu/addon-block-sitemainmenu.html b/src/addon/block/sitemainmenu/components/sitemainmenu/addon-block-sitemainmenu.html
index 011ce4b9a..74ec899a7 100644
--- a/src/addon/block/sitemainmenu/components/sitemainmenu/addon-block-sitemainmenu.html
+++ b/src/addon/block/sitemainmenu/components/sitemainmenu/addon-block-sitemainmenu.html
@@ -1,7 +1,7 @@
+<ion-item-divider color="light">
+    <h2>{{ 'addon.block_sitemainmenu.pluginname' | translate }}</h2>
+</ion-item-divider>
 <core-loading [hideUntil]="loaded" class="core-loading-center">
-    <ion-item-divider color="light">
-        <h2>{{ 'addon.block_sitemainmenu.pluginname' | translate }}</h2>
-    </ion-item-divider>
     <ion-item text-wrap *ngIf="block.summary">
         <core-format-text [text]="block.summary"></core-format-text>
     </ion-item>
diff --git a/src/addon/block/sitemainmenu/providers/block-handler.ts b/src/addon/block/sitemainmenu/providers/block-handler.ts
index 09a94796d..8c699aff0 100644
--- a/src/addon/block/sitemainmenu/providers/block-handler.ts
+++ b/src/addon/block/sitemainmenu/providers/block-handler.ts
@@ -13,28 +13,20 @@
 // limitations under the License.
 
 import { Injectable, Injector } from '@angular/core';
-import { CoreBlockHandler, CoreBlockHandlerData } from '@core/block/providers/delegate';
+import { CoreBlockHandlerData } from '@core/block/providers/delegate';
 import { AddonBlockSiteMainMenuComponent } from '../components/sitemainmenu/sitemainmenu';
+import { CoreBlockBaseHandler } from '@core/block/classes/base-block-handler';
 
 /**
- * Course nav handler.
+ * Block handler.
  */
 @Injectable()
-export class AddonBlockSiteMainMenuHandler implements CoreBlockHandler {
-    name = 'AddonBlockSiteMainMenuHandler';
+export class AddonBlockSiteMainMenuHandler extends CoreBlockBaseHandler {
+    name = 'AddonBlockSiteMainMenu';
     blockName = 'site_main_menu';
 
     constructor() {
-        // Nothing to do.
-    }
-
-    /**
-     * Check if the handler is enabled on a site level.
-     *
-     * @return {boolean} Whether or not the handler is enabled on a site level.
-     */
-    isEnabled(): boolean | Promise<boolean> {
-        return true;
+        super();
     }
 
     /**
diff --git a/src/addon/block/timeline/components/timeline/addon-block-timeline.html b/src/addon/block/timeline/components/timeline/addon-block-timeline.html
index 54682a729..50096c64f 100644
--- a/src/addon/block/timeline/components/timeline/addon-block-timeline.html
+++ b/src/addon/block/timeline/components/timeline/addon-block-timeline.html
@@ -1,7 +1,7 @@
+<ion-item-divider color="light">
+    <h2>{{ 'addon.block_timeline.pluginname' | translate }}</h2>
+</ion-item-divider>
 <core-loading [hideUntil]="loaded" class="core-loading-center">
-    <ion-item-divider color="light">
-        <h2>{{ 'addon.block_timeline.pluginname' | translate }}</h2>
-    </ion-item-divider>
     <div padding ion-row>
         <ion-col>
             <ion-select text-start [(ngModel)]="filter" (ngModelChange)="switchFilter()" interface="popover" class="core-button-select">
diff --git a/src/addon/block/timeline/providers/block-handler.ts b/src/addon/block/timeline/providers/block-handler.ts
index a05f8c01f..c0f60e7dd 100644
--- a/src/addon/block/timeline/providers/block-handler.ts
+++ b/src/addon/block/timeline/providers/block-handler.ts
@@ -13,20 +13,25 @@
 // limitations under the License.
 
 import { Injectable, Injector } from '@angular/core';
-import { CoreBlockHandler, CoreBlockHandlerData } from '@core/block/providers/delegate';
+import { CoreSitesProvider } from '@providers/sites';
+import { CoreBlockHandlerData } from '@core/block/providers/delegate';
+import { CoreCoursesProvider } from '@core/courses/providers/courses';
 import { AddonBlockTimelineProvider } from '@addon/block/timeline/providers/timeline';
 import { AddonBlockTimelineComponent } from '../components/timeline/timeline';
+import { CoreBlockBaseHandler } from '@core/block/classes/base-block-handler';
 
 /**
- * Course nav handler.
+ * Block handler.
  */
 @Injectable()
-export class AddonBlockTimelineHandler implements CoreBlockHandler {
-    name = 'AddonBlockTimelineHandler';
+export class AddonBlockTimelineHandler extends CoreBlockBaseHandler {
+    name = 'AddonBlockTimeline';
     blockName = 'timeline';
 
-    constructor(private timelineProvider: AddonBlockTimelineProvider) {
-        // Nothing to do.
+    constructor(private timelineProvider: AddonBlockTimelineProvider, private coursesProvider: CoreCoursesProvider,
+        private sitesProvider: CoreSitesProvider) {
+
+        super();
     }
 
     /**
@@ -35,7 +40,8 @@ export class AddonBlockTimelineHandler implements CoreBlockHandler {
      * @return {boolean} Whether or not the handler is enabled on a site level.
      */
     isEnabled(): boolean | Promise<boolean> {
-        return this.timelineProvider.isAvailable();
+        return this.timelineProvider.isAvailable() && (this.sitesProvider.getCurrentSite().isVersionGreaterEqualThan('3.6') ||
+            !this.coursesProvider.isMyCoursesDisabledInSite());
     }
 
     /**
diff --git a/src/core/block/providers/default-block-handler.ts b/src/core/block/providers/default-block-handler.ts
index c4d04891f..23257b2c5 100644
--- a/src/core/block/providers/default-block-handler.ts
+++ b/src/core/block/providers/default-block-handler.ts
@@ -21,7 +21,7 @@ import { CoreBlockBaseHandler } from '../classes/base-block-handler';
 @Injectable()
 export class CoreBlockDefaultHandler extends CoreBlockBaseHandler {
     name = 'CoreBlockDefault';
-    type = 'default';
+    blockName = 'default';
 
     constructor() {
         super();
diff --git a/src/core/block/providers/delegate.ts b/src/core/block/providers/delegate.ts
index b6d605bfa..363dff591 100644
--- a/src/core/block/providers/delegate.ts
+++ b/src/core/block/providers/delegate.ts
@@ -80,6 +80,8 @@ export class CoreBlockDelegate extends CoreDelegate {
 
     protected handlerNameProperty = 'blockName';
 
+    protected featurePrefix = 'CoreBlockDelegate_';
+
     constructor(logger: CoreLoggerProvider, sitesProvider: CoreSitesProvider, eventsProvider: CoreEventsProvider,
             protected defaultHandler: CoreBlockDefaultHandler) {
         super('CoreBlockDelegate', logger, sitesProvider, eventsProvider);