+ /**
+ * Check if the title is in a talk namespace
+ *
+ * @return {boolean} The title is in a talk namespace
+ */
+ isTalkPage: function () {
+ return Title.isTalkNamespace( this.getNamespaceId() );
+ },
+
+ /**
+ * Get the title for the associated talk page
+ *
+ * @return {mw.Title|null} The title for the associated talk page, null if not available
+ */
+ getTalkPage: function () {
+ if ( !this.canHaveTalkPage() ) {
+ return null;
+ }
+ return this.isTalkPage() ?
+ this :
+ Title.makeTitle( this.getNamespaceId() + 1, this.getMainText() );
+ },
+
+ /**
+ * Get the title for the subject page of a talk page
+ *
+ * @return {mw.Title|null} The title for the subject page of a talk page, null if not available
+ */
+ getSubjectPage: function () {
+ return this.isTalkPage() ?
+ Title.makeTitle( this.getNamespaceId() - 1, this.getMainText() ) :
+ this;
+ },
+
+ /**
+ * Check the the title can have an associated talk page
+ *
+ * @return {boolean} The title can have an associated talk page
+ */
+ canHaveTalkPage: function () {
+ return this.getNamespaceId() >= NS_MAIN;
+ },
+