diff --git a/src/addon/mod/forum/pages/discussion/discussion.ts b/src/addon/mod/forum/pages/discussion/discussion.ts
index cc4cd42f6..e49b8684d 100644
--- a/src/addon/mod/forum/pages/discussion/discussion.ts
+++ b/src/addon/mod/forum/pages/discussion/discussion.ts
@@ -326,10 +326,17 @@ export class AddonModForumDiscussionPage implements OnDestroy {
         }).then(() => {
             let posts = offlineReplies.concat(onlinePosts);
 
+            const startingPost = this.forumProvider.extractStartingPost(posts);
+            if (startingPost) {
+                // Update discussion data from first post.
+                this.discussion = Object.assign(this.discussion || {}, startingPost);
+            }
+
             // If sort type is nested, normal sorting is disabled and nested posts will be displayed.
             if (this.sort == 'nested') {
                 // Sort first by creation date to make format tree work.
                 this.forumProvider.sortDiscussionPosts(posts, 'ASC');
+
                 posts = this.utils.formatTree(posts, 'parent', 'id', this.discussion.id);
             } else {
                 // Set default reply subject.
@@ -364,7 +371,7 @@ export class AddonModForumDiscussionPage implements OnDestroy {
                     }
                 }));
 
-                // Fetch the discussion if not passed as parameter.
+                // The discussion object was not passed as parameter and there is no starting post. Should not happen.
                 if (!this.discussion) {
                     promises.push(this.loadDiscussion(this.forumId, this.discussionId));
                 }
@@ -373,12 +380,9 @@ export class AddonModForumDiscussionPage implements OnDestroy {
             }).catch(() => {
                 // Ignore errors.
             }).then(() => {
-                const startingPost = this.forumProvider.extractStartingPost(posts);
-                if (startingPost) {
-                    // Update discussion data from first post.
-                    this.discussion = Object.assign(this.discussion || {}, startingPost);
-                } else if (!this.discussion) {
-                    // The discussion object was not passed as parameter and there is no starting post.
+
+                if (!this.discussion) {
+                    // The discussion object was not passed as parameter and there is no starting post. Should not happen.
                     return Promise.reject('Invalid forum discussion.');
                 }
 
diff --git a/src/addon/mod/forum/providers/discussion-link-handler.ts b/src/addon/mod/forum/providers/discussion-link-handler.ts
index e884b6545..546e477f0 100644
--- a/src/addon/mod/forum/providers/discussion-link-handler.ts
+++ b/src/addon/mod/forum/providers/discussion-link-handler.ts
@@ -51,7 +51,7 @@ export class AddonModForumDiscussionLinkHandler extends CoreContentLinksHandlerB
         return [{
             action: (siteId, navCtrl?): void => {
                 const pageParams: any = {
-                    courseId: courseId || parseInt(params.courseid, 10) || parseInt(params.cid, 10),
+                    courseId: courseId || parseInt(params.courseid, 10) || parseInt(params.cid, 10) || undefined,
                     discussionId: parseInt(params.d, 10),
                     cmId: data.cmid && parseInt(data.cmid, 10),
                     forumId: data.instance && parseInt(data.instance, 10)
diff --git a/src/addon/mod/forum/providers/forum.ts b/src/addon/mod/forum/providers/forum.ts
index a852c2aec..96fd64ce1 100644
--- a/src/addon/mod/forum/providers/forum.ts
+++ b/src/addon/mod/forum/providers/forum.ts
@@ -278,14 +278,9 @@ export class AddonModForumProvider {
      * @return Starting post or undefined if not found.
      */
     extractStartingPost(posts: any[]): any {
-        // Check the last post first, since they'll usually be ordered by create time.
-        for (let i = posts.length - 1; i >= 0; i--) {
-            if (posts[i].parent == 0) {
-                return posts.splice(i, 1).pop(); // Remove it from the array.
-            }
-        }
+        const index = posts.findIndex((post) => post.parent == 0);
 
-        return undefined;
+        return index >= 0 ? posts.splice(index, 1).pop() : undefined;
     }
 
     /**