diff --git a/.gitignore b/.gitignore
index 11eb2702ffa50e485e65f001ceb4ec20b21e45c5..daa8d817c5dea800e76dda53c2f171388d2e3a81 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,5 +1,4 @@
 /vendor/
 .idea
 build-coverage
-*.phar
-composer.lock
\ No newline at end of file
+*.phar
\ No newline at end of file
diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index 97023aa7cc1943a9985c3f2b6e9842974fe72759..ff79b64bb448898ba1850676a3973c9e7f118064 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -1,310 +1,6 @@
 variables:
-  WPDESK_CI_VERSION: 1.10.19
-  MYSQL_ROOT_PASSWORD: mysql
-  MYSQL_DATABASE: wptest
-  MYSQL_USER: mysql
-  MYSQL_PASSWORD: mysql
-  MYSQL_INNODB_LOG_BUFFER_SIZE: 32M
-  PHP_ERROR_REPORTING: E_ALL
-  COMPOSER_ALLOW_SUPERUSER: 1
-  GIT_STRATEGY: fetch
-  ACCEPTANCE_ERROR_PATH: ${CI_PROJECT_DIR}/acceptance
+  DISABLE_PHP_5_5: 1
+  DISABLE_ACCEPTANCE: "1"
+  DISABLE_FUNCTIONAL: "1"
 
-stages:
-  - tools
-  - tests
-  - pre-deploy
-  - deploy
-
-.template: &job-test-template
-  stage: tests
-  coverage: '/^\s*Lines:\s*\d+.\d+\%/'
-
-.template: &job-test-integration-template
-  <<: *job-test-template
-  services:
-    - mysql:5.6
-  script:
-    - echo ${WPDESK_CI_VERSION}
-    - ls -l
-    - php --version
-    - cat /tmp/wordpress-develop/src/wp-includes/version.php
-    - cat /tmp/woocommerce/woocommerce.php
-    - composer update --no-progress
-    - if [[ -f tests/integration/prepare.sh ]]; then sh tests/integration/prepare.sh; fi
-    - vendor/bin/phpunit --configuration phpunit-integration.xml --coverage-text --colors=never
-  only:
-    - tags
-
-.template: &job-test-integration-template-fast
-  <<: *job-test-integration-template
-  script:
-    - echo ${WPDESK_CI_VERSION}
-    - ls -l
-    - php --version
-    - cat /tmp/wordpress-develop/src/wp-includes/version.php
-    - cat /tmp/woocommerce/woocommerce.php
-    - composer update --no-progress
-    - if [[ -f tests/integration/prepare.sh ]]; then sh tests/integration/prepare.sh; fi
-    - vendor/bin/phpunit --configuration phpunit-integration.xml --no-coverage
-  except:
-    - tags
-  only:
-
-.template: &job-test-unit-template
-  <<: *job-test-template
-  script:
-    - echo ${WPDESK_CI_VERSION}
-    - ls -l
-    - php --version
-    - cat /tmp/wordpress-develop/src/wp-includes/version.php
-    - cat /tmp/woocommerce/woocommerce.php
-    - composer update --no-progress
-    - vendor/bin/phpunit --configuration phpunit-unit.xml --coverage-text --colors=never
-  only:
-    - tags
-
-.template: &job-test-unit-template-fast
-  <<: *job-test-unit-template
-  script:
-    - echo ${WPDESK_CI_VERSION}
-    - ls -l
-    - php --version
-    - cat /tmp/wordpress-develop/src/wp-includes/version.php
-    - cat /tmp/woocommerce/woocommerce.php
-    - composer update --no-progress
-    - vendor/bin/phpunit --configuration phpunit-unit.xml --no-coverage
-  except:
-    - tags
-  only:
-
-.template: &job-deploy-template
-  image: wpdesknet/amazon-svn-deploy
-  stage: deploy
-  dependencies:
-    - build to deploy
-    - unit test lastest coverage
-    - integration test lastest coverage
-  retry: 2
-  when: manual
-  only:
-    - tags
-
-before_script:
-  - cd ${CI_PROJECT_DIR}
-
-phpmetric metrics:
-  stage: tools
-  image: wpdesknet/phpunit-woocommerce:0-0
-  allow_failure: true
-  when: manual
-  artifacts:
-    when: always
-    expire_in: 1 month
-    name: "metrics"
-    paths:
-      - ${CI_PROJECT_DIR}/phpmetric
-  script:
-    - echo ${WPDESK_CI_VERSION}
-    - composer require phpmetrics/phpmetrics
-    - composer update --no-progress
-    - php ./vendor/bin/phpmetrics --report-html=phpmetric .
-
-churn metrics:
-  stage: tools
-  image: wpdesknet/phpunit-woocommerce:0-0
-  allow_failure: true
-  when: manual
-  script:
-    - echo ${WPDESK_CI_VERSION}
-    - composer require bmitch/churn-php
-    - composer update --no-progress
-    - vendor/bin/churn run classes inc
-
-#code style test:
-# stage: tests
-#  image: wpdesknet/phpunit-woocommerce:0-0
-#  allow_failure: true
-#  script:
-#    - echo ${WPDESK_CI_VERSION}
-#    - composer update --no-progress
-#    - vendor/bin/phpcs
-
-unit test lastest:
-  <<: *job-test-unit-template-fast
-  image: wpdesknet/phpunit-woocommerce:0-0
-
-integration test lastest:
-  <<: *job-test-integration-template-fast
-  image: wpdesknet/phpunit-woocommerce:0-0
-
-unit test lastest coverage:
-  <<: *job-test-unit-template
-  image: wpdesknet/phpunit-woocommerce:0-0
-
-integration test lastest coverage:
-  <<: *job-test-integration-template
-  image: wpdesknet/phpunit-woocommerce:0-0
-
-integration test php7-1 wc-1:
-  <<: *job-test-integration-template-fast
-  image: wpdesknet/phpunit-woocommerce:1-1
-
-integration test php7 wc-2:
-  <<: *job-test-integration-template-fast
-  image: wpdesknet/phpunit-woocommerce:2-2
-
-integration test php-7 wc-3:
-  <<: *job-test-integration-template-fast
-  image: wpdesknet/phpunit-woocommerce:2-3
-
-integration test php5-6:
-  <<: *job-test-integration-template-fast
-  image: wpdesknet/phpunit-woocommerce:3-0
-
-integration test php5-5:
-  <<: *job-test-integration-template-fast
-  image: wpdesknet/phpunit-woocommerce:4-0
-
-integration test current woocommerce:
-  <<: *job-test-integration-template-fast
-  image: wpdesknet/phpunit-woocommerce:0-0
-  allow_failure: true
-  before_script:
-    - cd /tmp
-    - rm -rf woocommerce
-    - git clone https://github.com/woocommerce/woocommerce.git
-    - cd ${CI_PROJECT_DIR}
-
-acceptance test:
-  image: wpdesknet/node
-  variables:
-    CI_DEBUG_SERVICES: trace
-  services:
-    - name: mysql:5.6
-      alias: mysqltests
-    - name: wpdesknet/apache-woocommerce:latest
-      alias: wootests
-    - name: selenium/standalone-chrome
-      alias: selenium
-  artifacts:
-    when: always
-    expire_in: 1 day
-    name: "error logs"
-    paths:
-      - ${CI_PROJECT_DIR}/acceptance
-  stage: tests
-  allow_failure: true
-  script:
-    - cd ${CI_PROJECT_DIR}
-    - composer update --no-progress --no-dev
-    - if [[ -f ${CI_PROJECT_DIR}/tests/acceptance/prepare.sh ]]; then sh ${CI_PROJECT_DIR}/tests/acceptance/prepare.sh; fi
-
-    - export MYSQL_IP=$(awk '/^[[:space:]]*($|#)/{next} /mysqltests/{print $1; exit}' /etc/hosts)
-    - export WOOTESTS_IP=$(awk '/^[[:space:]]*($|#)/{next} /wootests/{print $1; exit}' /etc/hosts)
-    - echo "http://wootests/wpdesk_init.php?mysql_ip=${MYSQL_IP}&wootests_ip=${WOOTESTS_IP}"
-    - wget -O /tmp/wpdesk_init.txt "http://wootests/wpdesk_init.php?mysql_ip=${MYSQL_IP}&wootests_ip=${WOOTESTS_IP}"
-    - tail -50 /tmp/wpdesk_init.txt
-
-    - sh /tmp/clone.sh git@gitlab.com:wpdesk/plugins-tests.git /tmp/tests headless
-    - cd /tmp/tests
-    - npm install
-    - npm install -g grunt-cli
-    - cd node_modules/.bin
-    - ./webdriver-manager update
-    - cd ../
-    - mkdir -p ${CI_PROJECT_DIR}/acceptance/reports/html/screenshot
-    - grunt chrome-${CI_PROJECT_NAME}
-
-
-apigen docs:
-  image:
-    name: wpdesknet/apigen
-  stage: pre-deploy
-  artifacts:
-    expire_in: 1 day
-    name: "docs"
-    paths:
-      - docs/
-  script:
-    - echo ${WPDESK_CI_VERSION}
-    - ls -l
-    - /app/vendor/bin/apigen generate
-    - php /app/hooks-docs.php ${CI_PROJECT_DIR}
-  only:
-    - tags
-
-pages:
-  stage: deploy
-  dependencies:
-    - apigen docs
-  script:
-    - rm -rf public
-    - mv docs/ public/
-    - 'curl -X POST --data-urlencode "payload={\"text\": \"Dokumentacja projektu ${CI_PROJECT_NAME} w wersji ${CI_COMMIT_REF_NAME} umieszczona w <https://gitlab.com/wpdesk/${CI_PROJECT_NAME}/pages|pages> \", }" https://hooks.slack.com/services/${SLACK_AUTH}'
-  artifacts:
-    expire_in: 1 day
-    paths:
-      - public
-  only:
-    - tags
-
-build to deploy:
-  image: wpdesknet/phpunit-woocommerce:4-0
-  stage: pre-deploy
-  artifacts:
-    expire_in: 1 month
-    name: "production release"
-    paths:
-      - release
-      - release.zip
-  script:
-    - echo ${WPDESK_CI_VERSION}
-    - php --version
-    - ls -l
-    - /tmp/set_version.sh ${CI_COMMIT_REF_NAME}
-    - rm -rf ${CI_PROJECT_DIR}/release ${CI_PROJECT_DIR}/release.zip /tmp/release
-    - mkdir /tmp/release
-    - mkdir -p ${CI_PROJECT_DIR}/release/${CI_PROJECT_NAME}
-    - cp -rf ${CI_PROJECT_DIR}/* /tmp/release
-    - cp -rf /tmp/release/* ${CI_PROJECT_DIR}/release/${CI_PROJECT_NAME}
-    - cd ${CI_PROJECT_DIR}/release/${CI_PROJECT_NAME}
-    - composer install --no-dev --no-progress --optimize-autoloader
-    - rm -rf build-coverage release tests docs .git .editorconfig .gitignore .gitlab-ci.yml apigen.neon phpunit.xml acceptance test_soap.php .gitlab
-    - rm -rf composer.json composer.lock phpcs.xml.dist phpunit-integration.xml phpunit-unit.xml composer.phar wp-cli.phar
-    - cd ../
-    - zip -r -q ../release.zip ./
-  only:
-    - tags
-
-deploy to shop:
-  <<: *job-deploy-template
-  script:
-    - echo ${WPDESK_CI_VERSION}
-    - /tmp/deploy_shop.sh ${CI_PROJECT_NAME} release.zip ${CI_PROJECT_NAME}.zip
-    - 'curl -X POST --data-urlencode "payload={\"text\": \"Projekt <https://gitlab.com/wpdesk/${CI_PROJECT_NAME}|${CI_PROJECT_NAME}> zdeployowany do sklepu w wersji ${CI_COMMIT_REF_NAME}\", }" https://hooks.slack.com/services/${SLACK_AUTH}'
-  environment:
-    name: wpdesk shop
-    url: https://wpdeskplugin.s3.amazonaws.com/${CI_PROJECT_NAME}.zip
-
-deploy to demo:
-  <<: *job-deploy-template
-  script:
-    - echo ${WPDESK_CI_VERSION}
-    - /tmp/deploy_demo.sh release/${CI_PROJECT_NAME} ${CI_PROJECT_NAME}
-    - 'curl -X POST --data-urlencode "payload={\"text\": \"Projekt <https://gitlab.com/wpdesk/${CI_PROJECT_NAME}|${CI_PROJECT_NAME}> zdeployowany do demo w wersji ${CI_COMMIT_REF_NAME}\", }" https://hooks.slack.com/services/${SLACK_AUTH}'
-  environment:
-    name: wpdesk demo
-    url: https://demo.wpdesk.org
-
-deploy to repository:
-  <<: *job-deploy-template
-  script:
-    - echo ${WPDESK_CI_VERSION}
-    - rm -rf /tmp/svn-repository
-    - mkdir /tmp/svn-repository
-    - /tmp/deploy_repository.sh ${CI_PROJECT_NAME} ${CI_PROJECT_DIR}/release/${CI_PROJECT_NAME} /tmp/svn-repository
-    - 'curl -X POST --data-urlencode "payload={\"text\": \"Projekt <https://gitlab.com/wpdesk/${CI_PROJECT_NAME}|${CI_PROJECT_NAME}> zdeployowany do repozytorium WP w wersji ${CI_COMMIT_REF_NAME}\", }" https://hooks.slack.com/services/${SLACK_AUTH}'
-  environment:
-    name: wordpress repository
-    url: https://downloads.wordpress.org/plugin/${CI_PROJECT_NAME}.${CI_COMMIT_REF_NAME}.zip
+include: 'https://gitlab.com/wpdesk/gitlab-ci/raw/master/gitlab-ci-shop.yml'
\ No newline at end of file
diff --git a/.gitlab/issue_templates/Bug.md b/.gitlab/issue_templates/Bug.md
deleted file mode 100644
index fb98b9efbe4725333c759257cb4692a543cccee8..0000000000000000000000000000000000000000
--- a/.gitlab/issue_templates/Bug.md
+++ /dev/null
@@ -1,32 +0,0 @@
-### Select WooCommerce version e.g: [x] 2.6
-<!--- Select the WooCommerce version on which the error occurred -->
-
-- [ ] [2.6](http://woo26.tests.wpdesk.org)
-- [ ] [2.7](http://woo27.tests.wpdesk.org)
-- [ ] [3.0](http://woo30.tests.wpdesk.org)
-- [ ] [3.1](http://woo31.tests.wpdesk.org)
-- [ ] [3.2](http://woo32.tests.wpdesk.org)
-- [ ] [3.3](http://woo33.tests.wpdesk.org)
-- [ ] [3.4](http://woo34.tests.wpdesk.org)
-- [ ] [Stable](https://stable.wpdesk.org/) 
-
-### Select PHP version e.g: [x] 5.6
-<!--- Select the PHP version on which the error occurred -->
-
-- [ ] 5.3 
-- [ ] 5.5
-- [ ] 5.6
-- [ ] 7.1
-- [ ] 7.2
-
-## Steps to Reproduce
-<!--- Provide a link to a live example, or an unambiguous set of steps to -->
-
-1. 
-2. 
-
-
-## Expected Behavior
-<!--- Tell what should happen -->
-
-1. 
\ No newline at end of file
diff --git a/apigen.neon b/apigen.neon
index 3cddd91f341529a26febc4c6fac4562edffcb9f0..867217fb654a63257c8a67d3ba82235380440b19 100644
--- a/apigen.neon
+++ b/apigen.neon
@@ -2,11 +2,11 @@ destination: docs
 templateConfig: /app/theme-woocommerce/config.neon
 extensions: [php]
 source:
-    - classes
+    - src
 exclude:
     - vendor
     - tests
-    - languages
+    - lang
 
 charset: [UTF-8]
 main: Wordpress plugin
diff --git a/classes/class-plugin-template-settings-hooks.php b/classes/class-plugin-template-settings-hooks.php
deleted file mode 100644
index 50b330b5330f4918484af9877360d8272ac9a6c4..0000000000000000000000000000000000000000
--- a/classes/class-plugin-template-settings-hooks.php
+++ /dev/null
@@ -1,268 +0,0 @@
-<?php
-
-if ( ! defined( 'ABSPATH' ) ) {
-	exit;
-} // Exit if accessed directly
-
-/**
- * Base plugin class for WP Desk plugins
- *
- * @author Grzegorz
- *
- */
-class WPDesk_Plugin_Template_Settings_Hooks {
-
-	private $plugin;
-
-	public function __construct( WPDesk_Plugin_1_10 $plugin ) {
-		$this->plugin = $plugin;
-	}
-
-	public function hooks() {
-		$func = str_replace( '-', '_', $this->plugin->get_namespace() );
-
-		// settings menu
-		add_filter( $func . '_menu', array( $this, 'settings_menu' ) );
-
-		// settings tabs
-		add_filter( $func . '_settings_tabs', array( $this, 'settings_tabs' ) );
-
-		// unsavable tabs
-		add_filter( $func . '_unsavable_tabs', array( $this, 'unsavable_tabs' ) );
-
-		// settings sections
-		add_filter( $func . '_registered_settings_sections', array( $this, 'registered_settings_sections' ) );
-
-		// settings
-		add_filter( $func . '_registered_settings', array( $this, 'registered_settings' ) );
-
-		// custom type hook
-		add_action( $func . '_thanks', array( $this, 'custom_type_thanks' ) );
-
-	}
-
-	public function get_text_domain() {
-		return $this->plugin->get_text_domain();
-	}
-
-	public function settings_menu( array $menu ) {
-
-		$menu['type']       = 'menu';
-		$menu['parent']     = null;
-		$menu['page_title'] = __( 'WP Desk Plugin Template Settings', $this->get_text_domain() );
-		$menu['show_title'] = true;
-		$menu['menu_title'] = __( 'Plugin template', $this->get_text_domain() );
-		$menu['capability'] = 'manage_options';
-		$menu['icon']       = '';
-		$menu['position']   = null;
-
-		return $menu;
-
-	}
-
-	public function settings_tabs() {
-		$tabs = array(
-			'welcome' => __( 'Welcome', 's214-settings-demo' ),
-			'fields'  => __( 'Fields', 's214-settings-demo' )
-		);
-
-		return $tabs;
-	}
-
-	public function unsavable_tabs() {
-		$tabs = array(
-			'welcome'
-		);
-
-		return $tabs;
-	}
-
-	public function registered_settings_sections() {
-		$sections = array(
-			'welcome' => array(
-				'main' => __( 'Welcome Aboard!', 's214-settings-demo' )
-			),
-			'fields'  => array(
-				'text'     => __( 'Text Fields', 's214-settings-demo' ),
-				'option'   => __( 'Option Fields', 's214-settings-demo' ),
-				'misc'     => __( 'Misc Fields', 's214-settings-demo' ),
-				'advanced' => __( 'Advanced Fields', 's214-settings-demo' )
-			)
-		);
-
-		return $sections;
-	}
-
-	function custom_type_thanks() {
-		$html = '<p>' . sprintf( __( 'The S214 Settings library is significantly inspired by and based on the awesome word done by %s and the team from %s, so we owe them a <strong>huge</strong> thank you!', 's214-settings-demo' ), '<a href="http://pippinsplugins.com" target="_blank">Pippin Williamson</a>', '<a href="https://easydigitaldownloads.com">Easy Digital Downloads</a>' ) . '</p>';
-		$html .= '<hr />';
-		$html .= '<p>' . sprintf( __( 'By the way, even though this <em>looks</em> like a %s field, it\'s actually an example of a \'hook\' field. It is created by attaching an action to the hook %s (in our case, %s).', 's214-settings-demo' ), '<a href="https://github.com/Section214/S214-Settings/wiki/Settings-Reference#descriptive_text-implements-a-descriptive-text-field" target="_blank"><code>descriptive_text</code></a>', '<a href="https://github.com/Section214/S214-Settings/wiki/Settings-Reference#hook-implements-a-custom-field-through-a-wordpress-action" target="_blank">hook</a>', '<code>{your_plugin}_{field_id}</code>', '<code>s214_settings_demo_thanks</code>' ) . '</p>';
-		$html .= '<p>' . sprintf( __( 'You\'ll also note that this tab doesn\'t have a save button. This is achieved by filtering %s, and adding the slug of the tab to the returned array.', 's214-settings-demo' ), '<code>{your_plugin}_unsavable_tabs</code>' ) . '</p>';
-
-		echo $html;
-	}
-
-	public function registered_settings( $settings ) {
-		$plugin_settings = array(
-			'welcome' => array(
-				'main' => array(
-					array(
-						'id'   => 'welcome_header',
-						'name' => __( 'Welcome Aboard!', 's214-settings-demo' ),
-						'desc' => '',
-						'type' => 'header'
-					),
-					array(
-						'id'            => 'welcome_note',
-						'name'          => '',
-						'desc'          => sprintf( __( 'This plugin will attempt to familiarize you with the various things this library is capable of. Just in case it wasn\'t obvious, the "Welcome Aboard" text above is an example of a %s field, and this field is a %s field. Remember, every field takes \'id\', \'name\', \'desc\' and \'type\' arguments!', 's214-settings-demo' ), '<a href="https://github.com/Section214/S214-Settings/wiki/Settings-Reference#header-implements-a-simple-header" target="_blank"><code>header</code></a>', '<a href="https://github.com/Section214/S214-Settings/wiki/Settings-Reference#descriptive_text-implements-a-descriptive-text-field" target="_blank"><code>descriptive_text</code></a>' ),
-						'type'          => 'descriptive_text',
-						'tooltip_title' => __( 'Hi There!', 's214-settings-demo' ),
-						'tooltip_desc'  => __( 'Other than the \'header\' and \'hook\' field types, all fields can display a tooltip. Do this by adding \'tooltip_title\' and \'tooltip_desc\' arguments to the field array.', 's214-settings-demo' )
-					),
-					array(
-						'id'   => 'thanks',
-						'name' => __( 'Thanks EDD!', 's214-settings-demo' ),
-						'desc' => '',
-						'type' => 'hook'
-					)
-				)
-			),
-			'fields'  => array(
-				'text'     => array(
-					array(
-						'id'   => 'text_header',
-						'name' => __( 'Text Field Examples', 's214-settings-demo' ),
-						'desc' => '',
-						'type' => 'header'
-					),
-					array(
-						'id'   => 'text',
-						'name' => sprintf( __( '%s Field', 's214-settings-demo' ), 'text' ),
-						'desc' => sprintf( __( 'Text fields can take \'std\', \'readonly\' and \'size\' arguements. Read more about text fields %s.', 's214-settings-demo' ), '<a href="https://github.com/Section214/S214-Settings/wiki/Settings-Reference#text-implements-a-text-field" target="_blank">' . __( 'here', 's214-settings-demo' ) . '</a>' ),
-						'type' => 'text',
-						'std'  => 'This is a text field'
-					),
-					array(
-						'id'   => 'textarea',
-						'name' => sprintf( __( '%s Field', 's214-settings-demo' ), 'textarea' ),
-						'desc' => sprintf( __( 'Textarea fields can take a \'std\' arguement. Read more about textarea fields %s.', 's214-settings-demo' ), '<a href="https://github.com/Section214/S214-Settings/wiki/Settings-Reference#textarea-implements-a-text-area" target="_blank">' . __( 'here', 's214-settings-demo' ) . '</a>' ),
-						'type' => 'textarea'
-					),
-					array(
-						'id'   => 'editor',
-						'name' => sprintf( __( '%s Field', 's214-settings-demo' ), 'editor' ),
-						'desc' => sprintf( __( 'Editor fields can take \'std\', \'allow_blank\', \'size\', \'wpautop\', \'buttons\' and \'teeny\' arguements. Read more about editor fields %s.', 's214-settings-demo' ), '<a href="https://github.com/Section214/S214-Settings/wiki/Settings-Reference#editor-implements-a-rich-text-editor" target="_blank">' . __( 'here', 's214-settings-demo' ) . '</a>' ),
-						'type' => 'editor'
-					),
-					array(
-						'id'   => 'html',
-						'name' => sprintf( __( '%s Field', 's214-settings-demo' ), 'html' ),
-						'desc' => sprintf( __( 'HTML fields can take a \'std\' arguement. Read more about HTML fields %s.', 's214-settings-demo' ), '<a href="https://github.com/Section214/S214-Settings/wiki/Settings-Reference#html-implements-a-codemirror-html-field" target="_blank">' . __( 'here', 's214-settings-demo' ) . '</a>' ),
-						'type' => 'html'
-					),
-					array(
-						'id'   => 'password',
-						'name' => sprintf( __( '%s Field', 's214-settings-demo' ), 'password' ),
-						'desc' => sprintf( __( 'Password fields can take \'std\' and \'size\' arguements. Read more about password fields %s.', 's214-settings-demo' ), '<a href="https://github.com/Section214/S214-Settings/wiki/Settings-Reference#password-implements-a-password-field" target="_blank">' . __( 'here', 's214-settings-demo' ) . '</a>' ),
-						'type' => 'password'
-					)
-				),
-				'option'   => array(
-					array(
-						'id'   => 'option_header',
-						'name' => __( 'Option Field Examples', 's214-settings-demo' ),
-						'desc' => '',
-						'type' => 'header'
-					),
-					array(
-						'id'   => 'checkbox',
-						'name' => sprintf( __( '%s Field', 's214-settings-demo' ), 'checkbox' ),
-						'desc' => sprintf( __( 'Checkbox fields only take the basic arguements. Read more about checkbox fields %s.', 's214-settings-demo' ), '<a href="https://github.com/Section214/S214-Settings/wiki/Settings-Reference#checkbox-implements-a-checkbox" target="_blank">' . __( 'here', 's214-settings-demo' ) . '</a>' ),
-						'type' => 'checkbox'
-					),
-					array(
-						'id'      => 'multicheck',
-						'name'    => sprintf( __( '%s Field', 's214-settings-demo' ), 'multicheck' ),
-						'desc'    => sprintf( __( 'Multicheck fields only take the basic arguements. Read more about multicheck fields %s.', 's214-settings-demo' ), '<a href="https://github.com/Section214/S214-Settings/wiki/Settings-Reference#multicheck-implements-a-multicheck-field" target="_blank">' . __( 'here', 's214-settings-demo' ) . '</a>' ),
-						'type'    => 'multicheck',
-						'options' => array(
-							'option1' => __( 'Option 1', 's214-settings-demo' ),
-							'option2' => __( 'Option 2', 's214-settings-demo' ),
-							'option3' => __( 'Option 3', 's214-settings-demo' )
-						)
-					),
-					array(
-						'id'      => 'radio',
-						'name'    => sprintf( __( '%s Field', 's214-settings-demo' ), 'radio' ),
-						'desc'    => sprintf( __( 'Radio fields can take a \'std\' arguement. Read more about radio fields %s.', 's214-settings-demo' ), '<a href="https://github.com/Section214/S214-Settings/wiki/Settings-Reference#radio-implements-a-radio-button-list-field" target="_blank">' . __( 'here', 's214-settings-demo' ) . '</a>' ),
-						'type'    => 'radio',
-						'options' => array(
-							'option1' => __( 'Option 1', 's214-settings-demo' ),
-							'option2' => __( 'Option 2', 's214-settings-demo' ),
-							'option3' => __( 'Option 3', 's214-settings-demo' )
-						)
-					),
-					array(
-						'id'      => 'select',
-						'name'    => sprintf( __( '%s Field', 's214-settings-demo' ), 'select' ),
-						'desc'    => sprintf( __( 'Select fields can take \'std\', \'placeholder\', \'select2\' and \'multiple\' arguements. Read more about select fields %s.', 's214-settings-demo' ), '<a href="https://github.com/Section214/S214-Settings/wiki/Settings-Reference#select-implements-a-select-field" target="_blank">' . __( 'here', 's214-settings-demo' ) . '</a>' ),
-						'type'    => 'select',
-						'options' => array(
-							'option1' => __( 'Option 1', 's214-settings-demo' ),
-							'option2' => __( 'Option 2', 's214-settings-demo' ),
-							'option3' => __( 'Option 3', 's214-settings-demo' )
-						)
-					)
-				),
-				'misc'     => array(
-					array(
-						'id'   => 'misc_header',
-						'name' => __( 'Misc Field Examples', 's214-settings-demo' ),
-						'desc' => '',
-						'type' => 'header'
-					),
-					array(
-						'id'   => 'color',
-						'name' => sprintf( __( '%s Field', 's214-settings-demo' ), 'color' ),
-						'desc' => sprintf( __( 'Color fields can take a \'std\' arguement. Read more about color fields %s.', 's214-settings-demo' ), '<a href="https://github.com/Section214/S214-Settings/wiki/Settings-Reference#color-implements-a-color-select-field" target="_blank">' . __( 'here', 's214-settings-demo' ) . '</a>' ),
-						'type' => 'color',
-						'std'  => '#000000'
-					),
-					array(
-						'id'   => 'number',
-						'name' => sprintf( __( '%s Field', 's214-settings-demo' ), 'number' ),
-						'desc' => sprintf( __( 'Number fields can take \'std\', \'max\', \'min\', \'step\', \'size\' and \'readonly\' arguements. Read more about number fields %s.', 's214-settings-demo' ), '<a href="https://github.com/Section214/S214-Settings/wiki/Settings-Reference#number-implements-a-number-field" target="_blank">' . __( 'here', 's214-settings-demo' ) . '</a>' ),
-						'type' => 'number',
-						'std'  => 1227
-					),
-					array(
-						'id'   => 'upload',
-						'name' => sprintf( __( '%s Field', 's214-settings-demo' ), 'upload' ),
-						'desc' => sprintf( __( 'Upload fields can take \'std\' and \'size\' arguements. Read more about upload fields %s.', 's214-settings-demo' ), '<a href="https://github.com/Section214/S214-Settings/wiki/Settings-Reference#upload-implements-an-upload-field" target="_blank">' . __( 'here', 's214-settings-demo' ) . '</a>' ),
-						'type' => 'upload'
-					)
-				),
-				'advanced' => array(
-					array(
-						'id'   => 'advanced_header',
-						'name' => __( 'Advanced Field Examples', 's214-settings-demo' ),
-						'desc' => '',
-						'type' => 'header'
-					),
-					array(
-						'id'   => 'sysinfo',
-						'name' => sprintf( __( '%s Field', 's214-settings-demo' ), 'sysinfo' ),
-						'desc' => sprintf( __( 'Sysinfo fields only take the basic arguements. Read more about sysinfo fields %s.', 's214-settings-demo' ), '<a href="https://github.com/Section214/S214-Settings/wiki/Settings-Reference#sysinfo-implements-a-system-info-display-field" target="_blank">' . __( 'here', 's214-settings-demo' ) . '</a>' ),
-						'type' => 'sysinfo',
-						'tab'  => 'advanced'
-					)
-				)
-			)
-		);
-
-		return array_merge( $settings, $plugin_settings );
-	}
-
-}
-
diff --git a/classes/plugin-template-factory.php b/classes/plugin-template-factory.php
deleted file mode 100644
index 19a0e7b90b949a243fdac51f221f01cf6cf8c626..0000000000000000000000000000000000000000
--- a/classes/plugin-template-factory.php
+++ /dev/null
@@ -1,47 +0,0 @@
-<?php
-require_once( 'wpdesk/class-plugin.php' );
-require_once( 'wpdesk/interface-plugin-factory.php' );
-require_once( 'plugin-template-plugin.php' );
-
-
-final class WPDesk_Plugin_Template_Factory implements WPDesk_Plugin_Factory_1_10 {
-
-	const PHP_EXTENSION = '.php';
-
-	/** @var WPDesk_Plugin_Template_Plugin */
-	private static $instance = null;
-
-	/**
-	 * Builds instance of plugin. If called more than once then more than one instance is created.
-	 *
-	 * @return WPDesk_Plugin_Template_Plugin
-	 */
-	public static function build_plugin() {
-		$wpdesk_plugin_template_plugin_data = array(
-			'plugin'     => plugin_basename( __FILE__ ),
-			'product_id' => 'WP Desk Plugin Template',
-			'version'    => PLUGIN_TEMPLATE_VERSION,
-			'config_uri' => admin_url( 'edit.php?post_type=inspire_invoice&page=plugin_template' )
-		);
-
-		$class_name = apply_filters( self::WPDESK_FILTER_PLUGIN_CLASS, WPDesk_Plugin_Template_Plugin::class );
-
-		$plugin_dir = dirname( dirname( __FILE__ ) );
-		$plugin_file = trailingslashit( $plugin_dir ) . basename( $plugin_dir ) . self::PHP_EXTENSION;
-
-		return new $class_name( $plugin_file, $wpdesk_plugin_template_plugin_data );
-	}
-
-	/**
-	 * Builds instance if needed and ensures there is only one instance.
-	 *
-	 * @return WPDesk_Plugin_Template_Plugin
-	 */
-	public static function get_plugin_instance() {
-		if ( empty( self::$instance ) ) {
-			self::$instance = self::build_plugin();
-		}
-
-		return self::$instance;
-	}
-}
\ No newline at end of file
diff --git a/classes/plugin-template-plugin.php b/classes/plugin-template-plugin.php
deleted file mode 100644
index d434de80e83bcbe3d2e417c0f4937c4b0fbc319c..0000000000000000000000000000000000000000
--- a/classes/plugin-template-plugin.php
+++ /dev/null
@@ -1,98 +0,0 @@
-<?php
-require_once( 'wpdesk/class-plugin.php' );
-
-class WPDesk_Plugin_Template_Plugin extends WPDesk_Plugin_1_10 {
-	/**
-	 * WPDesk_Plugin_Template_Plugin constructor.
-	 *
-	 * @param array $plugin_data
-	 */
-	public function __construct( $base_file, $plugin_data ) {
-		$this->plugin_namespace   = 'plugin-template';
-		$this->plugin_text_domain = 'plugin-template';
-
-		$this->plugin_has_settings  = true;
-		$this->default_settings_tab = 'welcome';
-
-		if ( is_array( $plugin_data ) && count( $plugin_data ) ) {
-			if ( ! class_exists( 'WPDesk_Helper_Plugin' ) ) {
-				require_once( 'wpdesk/class-helper.php' );
-				add_filter( 'plugins_api', array( $this, 'wpdesk_helper_install' ), 10, 3 );
-				add_action( 'admin_notices', array( $this, 'wpdesk_helper_notice' ) );
-			}
-			$helper = new WPDesk_Helper_Plugin( $plugin_data );
-			if ( ! $helper->is_active() ) {
-				$this->plugin_is_active = false;
-			}
-		}
-
-		parent::__construct( $base_file, $plugin_data );
-
-		if ( $this->plugin_is_active() ) {
-			require_once 'class-plugin-template-settings-hooks.php';
-			$this->settings_hooks = new WPDesk_Plugin_Template_Settings_Hooks( $this );
-			$this->settings_hooks->hooks();
-			$this->init();
-			$this->hooks();
-		}
-	}
-
-	public function init() {
-	}
-
-	public function hooks() {
-		parent::hooks();
-	}
-
-	/**
-	 * Helper functions
-	 */
-
-	/**
-	 * Load installer for the WP Desk Helper.
-	 * @return $api Object
-	 */
-	public function wpdesk_helper_install( $api, $action, $args ) {
-		$download_url = 'http://www.wpdesk.pl/wp-content/uploads/wpdesk-helper.zip';
-
-		if ( 'plugin_information' != $action ||
-		     false !== $api ||
-		     ! isset( $args->slug ) ||
-		     'wpdesk-helper' != $args->slug
-		) {
-			return $api;
-		}
-
-		$api                = new stdClass();
-		$api->name          = 'WP Desk Helper';
-		$api->version       = '1.0';
-		$api->download_link = esc_url( $download_url );
-
-		return $api;
-	}
-
-	/**
-	 * Display a notice if the "WP Desk Helper" plugin hasn't been installed.
-	 * @return void
-	 */
-	public function wpdesk_helper_notice() {
-
-		$active_plugins = apply_filters( 'active_plugins', get_option( 'active_plugins' ) );
-		if ( in_array( 'wpdesk-helper/wpdesk-helper.php', $active_plugins ) ) {
-			return;
-		}
-
-		$slug         = 'wpdesk-helper';
-		$install_url  = wp_nonce_url( self_admin_url( 'update.php?action=install-plugin&plugin=' . $slug ), 'install-plugin_' . $slug );
-		$activate_url = 'plugins.php?action=activate&plugin=' . urlencode( 'wpdesk-helper/wpdesk-helper.php' ) . '&plugin_status=all&paged=1&s&_wpnonce=' . urlencode( wp_create_nonce( 'activate-plugin_wpdesk-helper/wpdesk-helper.php' ) );
-
-		$message = sprintf( wp_kses( __( '<a href="%s">Install the WP Desk Helper plugin</a> to activate and get updates for your WP Desk plugins.', 'wpdesk-plugin' ), array( 'a' => array( 'href' => array() ) ) ), esc_url( $install_url ) );
-		$plugins = array_keys( get_plugins() );
-		foreach ( $plugins as $plugin ) {
-			if ( strpos( $plugin, 'wpdesk-helper.php' ) !== false ) {
-				$message = sprintf( wp_kses( __( '<a href="%s">Activate the WP Desk Helper plugin</a> to activate and get updates for your WP Desk plugins.', 'wpdesk-plugin' ), array( 'a' => array( 'href' => array() ) ) ), esc_url( admin_url( $activate_url ) ) );
-			}
-		}
-		echo '<div class="error fade"><p>' . $message . '</p></div>' . "\n";
-	}
-}
\ No newline at end of file
diff --git a/classes/wpdesk/assets/css/admin-settings.css b/classes/wpdesk/assets/css/admin-settings.css
deleted file mode 100644
index c8ac53484d135dc5ede1437cffdeec62acce8496..0000000000000000000000000000000000000000
--- a/classes/wpdesk/assets/css/admin-settings.css
+++ /dev/null
@@ -1,82 +0,0 @@
-/* Added by WP Desk - Reset some default WP styles
--------------------------------------------------------------- */
-.select2-container li {
-    margin-bottom: 0;
-}
-
-/* Added by WP Desk - Select2 Columns Draggable/Sortable
--------------------------------------------------------------- */
-.select-2-columns .available-column,
-.select-2-columns .selected-column {
-    background-color: #fff;
-    border: 1px solid #e5e5e5;
-	float: left;
-	margin-right: 20px;
-	padding: 12px 14px;
-	max-width: 450px;
-}
-
-.select-2-columns > div > strong {
-    display: block;
-    margin-bottom: 10px;
-}
-
-.select-2-columns ul {
-    margin: 0;
-	min-height: 50px;
-	min-width: 200px;
-}
-
-.select-2-columns li {
-    background-color: #fafafa;
-    border: 1px solid #e5e5e5;
-    cursor: move;
-    padding: 5px 10px;
-}
-
-.select-2-columns li:hover {
-    border-color: #999;
-}
-
-.select-2-columns .ui-sortable-placeholder {
-    background-color: transparent;
-    border:1px dashed #b4b9be;
-    visibility: visible !important;
-}
-
-
-/* Fix color picker label alignment
--------------------------------------------------------------- */
-.s214-color-picker-label {
-    position: absolute;
-    display: inline-block;
-    padding-top: 4px;
-}
-
-/* System info styles
--------------------------------------------------------------- */
-#system-info-textarea {
-    width: 800px;
-    height: 400px;
-    font-family: Menlo, Monaco, monospace;
-    background: none;
-    white-space: pre;
-    overflow: auto;
-    display: block;
-}
-
-/* Tooltips
--------------------------------------------------------------- */
-.s214-help-tip {
-    cursor: help;
-}
-
-.ui-tooltip {
-    background: #333 !important;
-    border-radius: 3px !important;
-    box-shadow: 1px 1px 2px 1px rgba(214,214,214,0.5);
-    color: #dedede !important;
-    max-width: 300px;
-    padding: 7px;
-    text-rendering: optimizeLegibility;
-}
diff --git a/classes/wpdesk/assets/css/admin-settings.min.css b/classes/wpdesk/assets/css/admin-settings.min.css
deleted file mode 100644
index 6b588208460feb329f0ff413cc6efa25bbb257b7..0000000000000000000000000000000000000000
--- a/classes/wpdesk/assets/css/admin-settings.min.css
+++ /dev/null
@@ -1 +0,0 @@
-.select2-container li{margin-bottom:0}.select-2-columns .available-column,.select-2-columns .selected-column{background-color:#fff;border:1px solid #e5e5e5;float:left;margin-right:20px;padding:12px 14px;max-width:450px}.select-2-columns > div > strong{display:block;margin-bottom:10px}.select-2-columns ul{margin:0;min-height:50px;min-width:200px}.select-2-columns li{background-color:#fafafa;border:1px solid #e5e5e5;cursor:move;padding:5px 10px}.select-2-columns li:hover{border-color:#999}.select-2-columns .ui-sortable-placeholder{background-color:transparent;border:1px dashed #b4b9be;visibility:visible !important}.s214-color-picker-label{position:absolute;display:inline-block;padding-top:4px}#system-info-textarea{width:800px;height:400px;font-family:Menlo, Monaco, monospace;background:none;white-space:pre;overflow:auto;display:block}.s214-help-tip{cursor:help}.ui-tooltip{background:#333 !important;border-radius:3px !important;box-shadow:1px 1px 2px 1px rgba(214,214,214,0.5);color:#dedede !important;max-width:300px;padding:7px;text-rendering:optimizeLegibility}
diff --git a/classes/wpdesk/assets/js/admin-settings.js b/classes/wpdesk/assets/js/admin-settings.js
deleted file mode 100644
index 21c0bdd23184238e0ccd372d0b4adb969ac9b6e3..0000000000000000000000000000000000000000
--- a/classes/wpdesk/assets/js/admin-settings.js
+++ /dev/null
@@ -1,104 +0,0 @@
-/*global jQuery, document, window, wp, CodeMirror, s214_settings_vars*/
-jQuery(document).ready(function ($) {
-    'use strict';
-
-    // Setup color picker
-    if ($('.s214-color-picker').length) {
-        $('.s214-color-picker').wpColorPicker();
-    }
-
-    // Setup select2
-    if ($('.s214-select2').length) {
-        $('.s214-select2').select2();
-    }
-
-    // Setup CodeMirror
-    if ($('.s214-html').length) {
-        $('.s214-html').each(function (index, elem) {
-            CodeMirror.fromTextArea(elem, {
-                lineNumbers: true,
-                mode: 'text/html',
-                showCursorWhenSelecting: true
-            });
-        });
-    }
-
-    // Setup tooltips
-    $('.s214-help-tip').tooltip({
-        content: function () {
-            return $(this).prop('title');
-        },
-        position: {
-            my: 'center top',
-            at: 'center bottom+10',
-            collision: 'flipfit'
-        },
-        hide: {
-            duration: 200
-        },
-        show: {
-            duration: 200
-        }
-    });
-
-    // Setup uploaders
-    if ($('.' + s214_settings_vars.func + '_settings_upload_button').length) {
-        var file_frame;
-
-        $('body').on('click', '.' + s214_settings_vars.func + '_settings_upload_button', function (e) {
-            e.preventDefault();
-
-            var button = $(this);
-
-            window.formfield = $(this).parent().prev();
-
-            // If the media frame already exists, reopen it
-            if (file_frame) {
-                file_frame.open();
-                return;
-            }
-
-            // Create the media frame
-            wp.media.frames.file_frame = wp.media({
-                frame: 'post',
-                state: 'insert',
-                title: button.data('uploader_title'),
-                button: {
-                    text: button.data('uploader_button_text')
-                },
-                multiple: false
-            });
-
-            file_frame = wp.media.frames.file_frame;
-
-            file_frame.on('menu:render:default', function (view) {
-                // Store our views in an object
-                var views = {};
-
-                // Unset default menu items
-                view.unset('library-separator');
-                view.unset('gallery');
-                view.unset('featured-image');
-                view.unset('embed');
-
-                // Initialize the views in our object
-                view.set(views);
-            });
-
-            // Run a callback on select
-            file_frame.on('insert', function () {
-                var selection = file_frame.state().get('selection');
-
-                selection.each(function (attachment) {
-                    attachment = attachment.toJSON();
-                    window.formfield.val(attachment.url);
-                });
-            });
-
-            // Open the modal
-            file_frame.open();
-        });
-
-        window.formfield = '';
-    }
-});
diff --git a/classes/wpdesk/assets/js/admin-settings.min.js b/classes/wpdesk/assets/js/admin-settings.min.js
deleted file mode 100644
index 5a34d98c1125f11ff879375c29be3401deb49585..0000000000000000000000000000000000000000
--- a/classes/wpdesk/assets/js/admin-settings.min.js
+++ /dev/null
@@ -1 +0,0 @@
-jQuery(document).ready(function(t){"use strict";if(t(".s214-color-picker").length&&t(".s214-color-picker").wpColorPicker(),t(".s214-select2").length&&t(".s214-select2").select2(),t(".s214-html").length&&t(".s214-html").each(function(t,e){CodeMirror.fromTextArea(e,{lineNumbers:!0,mode:"text/html",showCursorWhenSelecting:!0})}),t(".s214-help-tip").tooltip({content:function(){return t(this).prop("title")},position:{my:"center top",at:"center bottom+10",collision:"flipfit"},hide:{duration:200},show:{duration:200}}),t("."+s214_settings_vars.func+"_settings_upload_button").length){var e;t("body").on("click","."+s214_settings_vars.func+"_settings_upload_button",function(n){n.preventDefault();var o=t(this);return window.formfield=t(this).parent().prev(),e?void e.open():(wp.media.frames.file_frame=wp.media({frame:"post",state:"insert",title:o.data("uploader_title"),button:{text:o.data("uploader_button_text")},multiple:!1}),e=wp.media.frames.file_frame,e.on("menu:render:default",function(t){var e={};t.unset("library-separator"),t.unset("gallery"),t.unset("featured-image"),t.unset("embed"),t.set(e)}),e.on("insert",function(){var t=e.state().get("selection");t.each(function(t){t=t.toJSON(),window.formfield.val(t.url)})}),void e.open())}),window.formfield=""}});
diff --git a/classes/wpdesk/class-plugin.php b/classes/wpdesk/class-plugin.php
deleted file mode 100644
index 0888d6e88bc13ae20c304bf443dcac4e5cbfb533..0000000000000000000000000000000000000000
--- a/classes/wpdesk/class-plugin.php
+++ /dev/null
@@ -1,277 +0,0 @@
-<?php
-
-if ( ! defined( 'ABSPATH' ) ) {
-	exit;
-} // Exit if accessed directly
-
-require_once 'functions.php';
-
-if ( ! class_exists( 'WPDesk_Plugin_1_10' ) ) {
-
-	require_once 'class-settings.php';
-
-	/**
-	 * Base plugin class for WP Desk plugins
-	 *
-	 * @author Grzegorz
-	 *
-	 */
-	class WPDesk_Plugin_1_10 {
-
-		const VERSION = '1.10';
-
-		/** @var bool  */
-		protected $plugin_is_active = true;
-
-		/** @var array */
-		protected $default_view_args;
-
-		/** @var string  */
-		public $plugin_namespace = 'wpdesk_plugin';
-
-		/** @var string  */
-		public $plugin_text_domain = 'wpdesk-plugin';
-
-		/** @var bool  */
-		public $plugin_has_settings = false;
-
-		/** @var string */
-		public $plugin_path;
-
-		/** @var string */
-		public $template_path;
-
-		/** @var string */
-		public $plugin_file_path;
-
-		/** @var string */
-		public $plugin_url;
-
-		/** @var bool  */
-		public $settings_url = false;
-
-		/** @var bool  */
-		public $docs_url = false;
-
-		/** @var string  */
-		public $default_settings_tab = 'general';
-
-		public $settings_hooks = null;
-
-		/** @var WPDesk_Settings_1_10 */
-		public $settings = null;
-
-		/** @var array  */
-		public $options = null;
-
-		protected function __construct( $base_file, $plugin_data = false ) {
-			$this->init_base_variables( $base_file );
-			if ( $this->plugin_is_active ) {
-				if ( $this->plugin_has_settings ) {
-					$this->settings = new WPDesk_Settings_1_10( $this, $this->get_namespace(), $this->default_settings_tab );
-					$this->options  = $this->settings->get_settings();
-				}
-			}
-			$this->hooks();
-		}
-
-		/**
-		 * @return bool
-		 */
-		public function plugin_is_active() {
-			return $this->plugin_is_active;
-		}
-
-		/**
-		 * @return WPDesk_Settings_1_10
-		 */
-		public function get_settings() {
-			return $this->settings;
-		}
-
-		/**
-		 * @param $key
-		 * @param $default
-		 *
-		 * @return mixed
-		 */
-		public function get_option( $key, $default ) {
-			return $this->settings->get_option( $key, $default );
-		}
-
-		/**
-		 * @return $this
-		 */
-		public function get_plugin() {
-			return $this;
-		}
-
-		/**
-		 * @return string
-		 */
-		public function get_text_domain() {
-			return $this->plugin_text_domain;
-		}
-
-		/**
-		 * @return void
-		 */
-		public function load_plugin_text_domain() {
-			$wpdesk_translation = load_plugin_textdomain( 'wpdesk-plugin', false, $this->get_namespace() . '/classes/wpdesk/lang/' );
-			$plugin_translation = load_plugin_textdomain( $this->get_text_domain(), false, $this->get_namespace() . '/lang/' );
-		}
-
-		/**
-		 * @param string $base_file
-		 */
-		public function init_base_variables( $base_file ) {
-			// Set Plugin Path
-			$this->plugin_path = dirname( $base_file );
-
-			// Set Plugin URL
-			$this->plugin_url = plugin_dir_url( $base_file );
-
-			$this->plugin_file_path = $base_file;
-
-			$this->template_path = $this->get_namespace();
-
-			$this->default_view_args = array(
-				'plugin_url' => $this->get_plugin_url()
-			);
-
-		}
-
-		/**
-		 * @return void
-		 */
-		public function hooks() {
-
-			add_action( 'admin_enqueue_scripts', array( $this, 'admin_enqueue_scripts' ) );
-
-			add_action( 'wp_enqueue_scripts', array( $this, 'wp_enqueue_scripts' ) );
-
-			add_action( 'plugins_loaded', array( $this, 'load_plugin_text_domain' ) );
-
-			add_filter( 'plugin_action_links_' . plugin_basename( $this->get_plugin_file_path() ), array(
-				$this,
-				'links_filter'
-			) );
-
-		}
-
-		/**
-		 *
-		 * @return string
-		 */
-		public function get_plugin_url() {
-			return esc_url( trailingslashit( $this->plugin_url ) );
-		}
-
-		public function get_plugin_assets_url() {
-			return esc_url( trailingslashit( $this->get_plugin_url() . 'assets' ) );
-		}
-
-		/**
-		 * @return string
-		 */
-		public function get_template_path() {
-			return trailingslashit( $this->template_path );
-		}
-
-		/**
-		 * @return string
-		 */
-		public function get_plugin_file_path() {
-			return $this->plugin_file_path;
-		}
-
-		/**
-		 * @return string
-		 */
-		public function get_namespace() {
-			return $this->plugin_namespace;
-		}
-
-		/**
-		 * @return null
-		 */
-		public function get_settings_hooks() {
-			return $this->settings_hooks;
-		}
-
-
-		/**
-		 * Renders end returns selected template
-		 *
-		 * @param string $name name of the template
-		 * @param string $path additional inner path to the template
-		 * @param array $args args accesible from template
-		 *
-		 * @return string
-		 */
-		public function load_template( $name, $path = '', $args = array() ) {
-			$plugin_template_path = trailingslashit( $this->plugin_path ) . 'templates/';
-
-			// Look within passed path within the theme - this is priority.
-			$template = locate_template(
-				array(
-					trailingslashit( $this->get_template_path() ) . trailingslashit( $path ) . $name . '.php',
-				)
-			);
-
-			if ( ! $template ) {
-				$template = $plugin_template_path . trailingslashit( $path ) . $name . '.php';
-			}
-
-			extract( $args );
-			ob_start();
-			include( $template );
-
-			return ob_get_clean();
-		}
-
-
-		public function admin_enqueue_scripts( $hooq ) {
-		}
-
-		public function wp_enqueue_scripts() {
-		}
-
-		/**
-		 * action_links function.
-		 *
-		 * @access public
-		 *
-		 * @param mixed $links
-		 *
-		 * @return array
-		 */
-		public function links_filter( $links ) {
-
-			$support_link = get_locale() === 'pl_PL' ? 'https://www.wpdesk.pl/support/' : 'https://www.wpdesk.net/support';
-
-			$plugin_links = array(
-				'<a href="' . $support_link . '">' . __( 'Support', 'wpdesk-plugin' ) . '</a>',
-			);
-			$links        = array_merge( $plugin_links, $links );
-
-			if ( $this->docs_url ) {
-				$plugin_links = array(
-					'<a href="' . $this->docs_url . '">' . __( 'Docs', 'wpdesk-plugin' ) . '</a>',
-				);
-				$links        = array_merge( $plugin_links, $links );
-			}
-
-			if ( $this->settings_url ) {
-				$plugin_links = array(
-					'<a href="' . $this->settings_url . '">' . __( 'Settings', 'wpdesk-plugin' ) . '</a>',
-				);
-				$links        = array_merge( $plugin_links, $links );
-			}
-
-			return $links;
-		}
-
-	}
-
-}
diff --git a/classes/wpdesk/class-requirement-checker.php b/classes/wpdesk/class-requirement-checker.php
deleted file mode 100644
index 8bb127a61fd7f05b06a4d44bef2392b5d251337a..0000000000000000000000000000000000000000
--- a/classes/wpdesk/class-requirement-checker.php
+++ /dev/null
@@ -1,356 +0,0 @@
-<?php
-
-if ( ! defined( 'ABSPATH' ) ) {
-	exit;
-} // Exit if accessed directly
-
-if ( ! class_exists( 'WPDesk_Requirement_Checker_1_10' ) ) {
-	/**
-	 * Checks requirements for plugin
-	 * have to be compatible with PHP 5.2.x
-	 */
-	class WPDesk_Requirement_Checker_1_10 {
-
-		const HOOK_PRIORITY_LOAD_AS_FIRST = -10;
-
-		/** @var string */
-		private $plugin_name = '';
-
-		/** @var string */
-		private $plugin_file = '';
-
-		/** @var string */
-		private $min_php_version;
-
-		/** @var string */
-		private $min_wp_version;
-
-		/** @var string */
-		private $min_wc_version;
-
-		/** @var array */
-		private $plugin_require;
-
-		/** @var array */
-		private $module_require;
-
-		/** @var array */
-		private $setting_require;
-
-		/** @var array */
-		private $notices;
-
-		/**
-		 * @param $plugin_file
-		 * @param $php_version
-		 * @param $wp_version
-		 * @param string|null $wc_version
-		 */
-		public function __construct( $plugin_file, $php_version, $wp_version, $wc_version = null ) {
-			$this->plugin_file = $plugin_file;
-			$this->plugin_name = $this->extract_plugin_title_from_header( $plugin_file );
-			$this->set_min_php_require( $php_version );
-			$this->set_min_wp_require( $wp_version );
-			$this->set_min_wc_require( $wc_version );
-
-			$this->plugin_require  = array();
-			$this->module_require  = array();
-			$this->setting_require = array();
-			$this->notices         = array();
-		}
-
-		/**
-		 * Should be used when you want to check if others plugin are loaded (WC for example)
-		 */
-		public function check_requirements_and_load_plugin_deferred() {
-			add_action( "plugins_loaded", array( $this, "check_requirements_and_load_plugin" ), self::HOOK_PRIORITY_LOAD_AS_FIRST );
-		}
-
-		/**
-		 * Checks if requirements are met and loads bootstrap
-		 */
-		public function check_requirements_and_load_plugin() {
-			if ( $this->is_requirements_met() ) {
-				require_once plugin_dir_path( $this->plugin_file ) . DIRECTORY_SEPARATOR . 'bootstrap.php';
-			} else {
-				$this->disable_plugin_render_notice();
-			}
-		}
-
-		/**
-		 * @param string $version
-		 *
-		 * @return $this
-		 */
-		public function set_min_php_require( $version ) {
-			$this->min_php_version = $version;
-
-			return $this;
-		}
-
-		/**
-		 * @param string $version
-		 *
-		 * @return $this
-		 */
-		public function set_min_wp_require( $version ) {
-			$this->min_wp_version = $version;
-
-			return $this;
-		}
-
-		/**
-		 * @param string $version
-		 *
-		 * @return $this
-		 */
-		public function set_min_wc_require( $version ) {
-			$this->min_wc_version = $version;
-
-			return $this;
-		}
-
-		/**
-		 * @param string $plugin_name
-		 * @param string $nice_plugin_name Nice plugin name for better looks in notice
-		 *
-		 * @return $this
-		 */
-		public function add_plugin_require( $plugin_name, $nice_plugin_name = null ) {
-			if ( is_null( $nice_plugin_name ) ) {
-				$this->plugin_require[ $plugin_name ] = $plugin_name;
-			} else {
-				$this->plugin_require[ $plugin_name ] = $nice_plugin_name;
-			}
-
-			return $this;
-		}
-
-		/**
-		 * @param string $module_name
-		 * @param string $nice_name Nice module name for better looks in notice
-		 *
-		 * @return $this
-		 */
-		public function add_php_module_require( $module_name, $nice_name = null ) {
-			if ( is_null( $nice_name ) ) {
-				$this->module_require[ $module_name ] = $module_name;
-			} else {
-				$this->module_require[ $module_name ] = $nice_name;
-			}
-
-			return $this;
-		}
-
-		/**
-		 * @param string $setting
-		 * @param mixed $value
-		 *
-		 * @return $this
-		 */
-		public function add_php_setting_require( $setting, $value ) {
-			$this->setting_require[ $setting ] = $value;
-
-			return $this;
-		}
-
-		/**
-		 * @param string $file
-		 *
-		 * @return string mixed
-		 */
-		private function extract_plugin_title_from_header( $file ) {
-			$plugin_data = get_file_data( $file, array(
-				'title' => 'Plugin Name'
-			) );
-
-			return $plugin_data['title'];
-		}
-
-		/**
-		 * @return bool
-		 */
-		public function is_requirements_met() {
-			$this->notices = $this->prepare_requirement_notices();
-
-			return count( $this->notices ) === 0;
-		}
-
-		/**
-		 * @return array
-		 */
-		private function prepare_requirement_notices() {
-			$notices = array();
-			if ( ! $this->is_php_at_least( $this->min_php_version ) ) {
-				$notices[] = $this->prepare_notice_message( sprintf( __( 'The &#8220;%s&#8221; plugin cannot run on PHP versions older than %s. Please contact your host and ask them to upgrade.', 'wpdesk-plugin' ), esc_html( $this->plugin_name ), $this->min_php_version ) );
-			}
-			if ( ! $this->is_wp_at_least( $this->min_wp_version ) ) {
-				$notices[] = $this->prepare_notice_message( sprintf( __( 'The &#8220;%s&#8221; plugin cannot run on WordPress versions older than %s. Please update WordPress.', 'wpdesk-plugin' ), esc_html( $this->plugin_name ), $this->min_wp_version ) );
-			}
-			if ( ! is_null( $this->min_wc_version ) && ! $this->is_wc_at_least( $this->min_wc_version ) ) {
-				$notices[] = $this->prepare_notice_message( sprintf( __( 'The &#8220;%s&#8221; plugin cannot run on WooCommerce versions older than %s. Please update WooCommerce.', 'wpdesk-plugin' ), esc_html( $this->plugin_name ), $this->min_wc_version ) );
-			}
-			$notices = $this->append_plugin_require_notices( $notices );
-			$notices = $this->append_module_require_notices( $notices );
-			$notices = $this->append_settings_require_notices( $notices );
-
-			return $notices;
-		}
-
-		/**
-		 * @param array $notices
-		 *
-		 * @return array
-		 */
-		private function append_module_require_notices( $notices ) {
-			if ( count( $this->module_require ) > 0 ) {
-				foreach ( $this->module_require as $module_name => $nice_module_name ) {
-					if ( ! $this->is_module_active( $module_name ) ) {
-						$notices[] = $this->prepare_notice_message( sprintf( __( 'The &#8220;%s&#8221; plugin cannot run without %s php module installed. Please contact your host and ask them to install %s.', 'wpdesk-plugin' ), esc_html( $this->plugin_name ), esc_html( basename( $nice_module_name ) ), esc_html( basename( $nice_module_name ) ) ) );
-					}
-				}
-			}
-
-			return $notices;
-		}
-
-		/**
-		 * @param array $notices
-		 *
-		 * @return array
-		 */
-		private function append_settings_require_notices( $notices ) {
-			if ( count( $this->setting_require ) > 0 ) {
-				foreach ( $this->setting_require as $setting => $value ) {
-					if ( ! $this->is_setting_set( $setting, $value ) ) {
-						$notices[] = $this->prepare_notice_message( sprintf( __( 'The &#8220;%s&#8221; plugin cannot run without %s php setting set to %s. Please contact your host and ask them to set %s.', 'wpdesk-plugin' ), esc_html( $this->plugin_name ), esc_html( basename( $setting ) ), esc_html( basename( $value ) ), esc_html( basename( $setting ) ) ) );
-					}
-				}
-			}
-
-			return $notices;
-		}
-
-		/**
-		 * @param array $notices
-		 *
-		 * @return array
-		 */
-		private function append_plugin_require_notices( $notices ) {
-			if ( count( $this->plugin_require ) > 0 ) {
-				foreach ( $this->plugin_require as $plugin_name => $nice_plugin_name ) {
-					if ( ! $this->is_wp_plugin_active( $plugin_name ) ) {
-						$notices[] = $this->prepare_notice_message( sprintf( __( 'The &#8220;%s&#8221; plugin cannot run without %s active. Please install and activate %s plugin.', 'wpdesk-plugin' ), esc_html( $this->plugin_name ), esc_html( basename( $nice_plugin_name ) ), esc_html( basename( $nice_plugin_name ) ) ) );
-					}
-				}
-			}
-
-			return $notices;
-		}
-
-		/**
-		 * @param string $name
-		 * @param mixed $value
-		 *
-		 * @return bool
-		 */
-		public static function is_setting_set( $name, $value ) {
-			return ini_get( $name ) === strval( $value );
-		}
-
-		/**
-		 * @param string $name
-		 *
-		 * @return bool
-		 */
-		public static function is_module_active( $name ) {
-			return extension_loaded( $name );
-		}
-
-		/**
-		 * @return void
-		 */
-		public function disable_plugin_render_notice() {
-			add_action( 'admin_notices', array( $this, 'deactivate_action' ) );
-			add_action( 'admin_notices', array( $this, 'render_notices_action' ) );
-		}
-
-		/**
-		 * Shoud be called as WordPress action
-		 *
-		 * @return void
-		 */
-		public function render_notices_action() {
-			foreach ( $this->notices as $notice ) {
-				echo $notice;
-			}
-		}
-
-		/**
-		 * Prepares message in html format
-		 *
-		 * @param string $message
-		 *
-		 * @return string
-		 */
-		private function prepare_notice_message( $message ) {
-			return '<div class="error"><p>' . $message . '</p></div>';
-		}
-
-		/**
-		 * @return void
-		 */
-		public function deactivate_action() {
-			if ( isset( $this->plugin_file ) ) {
-				deactivate_plugins( plugin_basename( $this->plugin_file ) );
-			}
-		}
-
-		/**
-		 * @param $min_version
-		 *
-		 * @return mixed
-		 */
-		public static function is_php_at_least( $min_version ) {
-			return version_compare( phpversion(), $min_version, '>=' );
-		}
-
-		/**
-		 * @param string $min_version
-		 *
-		 * @return bool
-		 */
-		public static function is_wp_at_least( $min_version ) {
-			return version_compare( get_bloginfo( 'version' ), $min_version, '>=' );
-		}
-
-		/**
-		 * Checks if plugin is active. Needs to be enabled in deferred way.
-		 *
-		 * @param string $plugin_file
-		 *
-		 * @return bool
-		 */
-		public static function is_wp_plugin_active( $plugin_file ) {
-			$active_plugins = (array) get_option( 'active_plugins', array() );
-
-			if ( is_multisite() ) {
-				$active_plugins = array_merge( $active_plugins, get_site_option( 'active_sitewide_plugins', array() ) );
-			}
-
-			return in_array( $plugin_file, $active_plugins ) || array_key_exists( $plugin_file, $active_plugins );
-		}
-
-		/**
-		 * Checks if plugin is active and have designated version. Needs to be enabled in deferred way.
-		 *
-		 * @param string $min_version
-		 *
-		 * @return bool
-		 */
-		public static function is_wc_at_least( $min_version ) {
-			return defined('WC_VERSION') &&
-			       version_compare( WC_VERSION, $min_version, '>=' );
-		}
-	}
-}
diff --git a/classes/wpdesk/class-settings.php b/classes/wpdesk/class-settings.php
deleted file mode 100644
index 3965a1bc92ecda5e5c4e4ea8251fa5b734f2232e..0000000000000000000000000000000000000000
--- a/classes/wpdesk/class-settings.php
+++ /dev/null
@@ -1,352 +0,0 @@
-<?php
-
-if ( ! defined( 'ABSPATH' ) ) {
-	exit;
-} // Exit if accessed directly
-
-if ( ! class_exists( 'WPDesk_Settings_1_10' ) ) {
-
-	if ( ! class_exists( 'WPDesk_S214_Settings_1_10' ) ) {
-		require_once 'settings-api/class.s214-settings.php';
-	}
-
-	/**
-	 * Base plugin class for WP Desk plugins settings
-	 *
-	 * @author Grzegorz
-	 *
-	 */
-	class WPDesk_Settings_1_10 extends WPDesk_S214_Settings_1_10 {
-
-		private $slug;
-
-		protected $version = '1.0';
-
-		protected $plugin_text_domain = 'wpdesk-plugin';
-
-		protected $plugin = null;
-
-		protected $func = 'wpdesk_plugin';
-
-		public function __construct( WPDesk_Plugin_1_10 $plugin, $slug = 'wpdesk-settings', $default_tab = 'general' ) {
-			parent::__construct( $slug, $default_tab );
-			$this->slug   = $slug;
-			$this->plugin = $plugin;
-			$this->func   = str_replace( '-', '_', $slug );
-			global ${$this->func . '_options'};
-			${$this->func . '_options'} = $this->get_settings();
-			$this->hooks();
-		}
-
-		public function hooks() {
-		}
-
-		public function render_settings_page() {
-			parent::render_settings_page();
-		}
-
-		public function enqueue_scripts( $hook ) {
-			if ( ! apply_filters( $this->func . '_load_admin_scripts', $this->load_scripts( $hook ), $hook ) ) {
-				return;
-			}
-
-			global $wp_scripts;
-
-			// Use minified libraries if SCRIPT_DEBUG is turned off
-			$suffix = ( defined( 'SCRIPT_DEBUG' ) && SCRIPT_DEBUG ) ? '' : '.min';
-			//$url_path    = str_replace( WP_CONTENT_DIR, WP_CONTENT_URL, dirname( __FILE__ ) );
-			$url_path       = $this->plugin->get_plugin_url() . 'classes/wpdesk';
-			$select2_cdn    = 'https://cdnjs.cloudflare.com/ajax/libs/select2/4.0.3/';
-			$cm_cdn         = 'https://cdnjs.cloudflare.com/ajax/libs/codemirror/5.14.2/';
-			$jquery_version = isset( $wp_scripts->registered['jquery-ui-core']->ver ) ? $wp_scripts->registered['jquery-ui-core']->ver : '1.11.4';
-
-			wp_enqueue_style( 'wp-color-picker' );
-			wp_enqueue_script( 'wp-color-picker' );
-			wp_enqueue_script( 'jquery-ui-tooltip' );
-			wp_enqueue_media();
-			wp_enqueue_style( 'jquery-ui-style', '//code.jquery.com/ui/' . $jquery_version . '/themes/smoothness/jquery-ui' . $suffix . '.css', array(), $jquery_version );
-
-			wp_enqueue_script( 'media-upload' );
-			wp_enqueue_style( 'thickbox' );
-			wp_enqueue_script( 'thickbox' );
-			wp_enqueue_style( 's14-select2', $select2_cdn . 'css/select2' . $suffix . '.css', array(), '4.0.3' );
-			wp_enqueue_script( 's14-select2', $select2_cdn . 'js/select2' . $suffix . '.js', array( 'jquery' ), '4.0.3' );
-
-			wp_enqueue_style( $this->slug . '-cm', $cm_cdn . 'codemirror.css', array(), '5.10' );
-			wp_enqueue_script( $this->slug . '-cm', $cm_cdn . 'codemirror.js', array( 'jquery' ), '5.14.2' );
-			wp_enqueue_script( $this->slug . '-cm-html', $cm_cdn . 'mode/htmlmixed/htmlmixed.js', array(
-				'jquery',
-				$this->slug . '-cm'
-			), '5.14.2' );
-			wp_enqueue_script( $this->slug . '-cm-xml', $cm_cdn . 'mode/xml/xml.js', array(
-				'jquery',
-				$this->slug . '-cm'
-			), '5.14.2' );
-			wp_enqueue_script( $this->slug . '-cm-js', $cm_cdn . 'mode/javascript/javascript.js', array(
-				'jquery',
-				$this->slug . '-cm'
-			), '5.14.2' );
-			wp_enqueue_script( $this->slug . '-cm-css', $cm_cdn . 'mode/css/css.js', array(
-				'jquery',
-				$this->slug . '-cm'
-			), '5.14.2' );
-			wp_enqueue_script( $this->slug . '-cm-php', $cm_cdn . 'mode/php/php.js', array(
-				'jquery',
-				$this->slug . '-cm'
-			), '5.14.2' );
-			wp_enqueue_script( $this->slug . '-cm-clike', $cm_cdn . 'mode/clike/clike.js', array(
-				'jquery',
-				$this->slug . '-cm'
-			), '5.14.2' );
-
-			wp_enqueue_style( $this->slug, $url_path . '/assets/css/admin-settings' . $suffix . '.css', array(), $this->version );
-			wp_enqueue_script( $this->slug . '-js', $url_path . '/assets/js/admin-settings' . $suffix . '.js', array( 'jquery' ), $this->version );
-			wp_localize_script( $this->slug . '-js', 's214_settings_vars', apply_filters( $this->func . 'localize_script', array(
-				'func'               => $this->func,
-				'image_media_button' => __( 'Insert Image', 'wpdesk-plugin' ),
-				'image_media_title'  => __( 'Select Image', 'wpdesk-plugin' ),
-			) ) );
-		}
-
-		/**
-		 * Add settings sections and fields
-		 *
-		 * @access      public
-		 * @since       1.0.0
-		 * @return      void
-		 */
-		function register_settings() {
-			if ( get_option( $this->func . '_settings' ) == false ) {
-				add_option( $this->func . '_settings' );
-			}
-
-			foreach ( $this->get_registered_settings() as $tab => $sections ) {
-				foreach ( $sections as $section => $settings ) {
-					// Check for backwards compatibility
-					$section_tabs = $this->get_settings_tab_sections( $tab );
-
-					if ( ! is_array( $section_tabs ) || ! array_key_exists( $section, $section_tabs ) ) {
-						$section  = 'main';
-						$settings = $sections;
-					}
-
-					add_settings_section(
-						$this->func . '_settings_' . $tab . '_' . $section,
-						__return_null(),
-						'__return_false',
-						$this->func . '_settings_' . $tab . '_' . $section
-					);
-
-					foreach ( $settings as $option ) {
-						// For backwards compatibility
-						if ( empty( $option['id'] ) ) {
-							continue;
-						}
-
-						$name = isset( $option['name'] ) ? $option['name'] : '';
-
-						add_settings_field(
-							$this->func . '_settings[' . $option['id'] . ']',
-							$name,
-							function_exists( $this->func . '_' . $option['type'] . '_callback' ) ? $this->func . '_' . $option['type'] . '_callback' : ( method_exists( $this, $option['type'] . '_callback' ) ? array(
-								$this,
-								$option['type'] . '_callback'
-							) : array( $this, 'missing_callback' ) ),
-							$this->func . '_settings_' . $tab . '_' . $section,
-							$this->func . '_settings_' . $tab . '_' . $section,
-							array(
-								'section'       => $section,
-								'id'            => isset( $option['id'] ) ? $option['id'] : null,
-								'desc'          => ! empty( $option['desc'] ) ? $option['desc'] : '',
-								'name'          => isset( $option['name'] ) ? $option['name'] : null,
-								'size'          => isset( $option['size'] ) ? $option['size'] : null,
-								'options'       => isset( $option['options'] ) ? $option['options'] : '',
-								'std'           => isset( $option['std'] ) ? $option['std'] : '',
-								'min'           => isset( $option['min'] ) ? $option['min'] : null,
-								'max'           => isset( $option['max'] ) ? $option['max'] : null,
-								'step'          => isset( $option['step'] ) ? $option['step'] : null,
-								'select2'       => isset( $option['select2'] ) ? $option['select2'] : null,
-								'placeholder'   => isset( $option['placeholder'] ) ? $option['placeholder'] : null,
-								'multiple'      => isset( $option['multiple'] ) ? $option['multiple'] : null,
-								'allow_blank'   => isset( $option['allow_blank'] ) ? $option['allow_blank'] : true,
-								'readonly'      => isset( $option['readonly'] ) ? $option['readonly'] : false,
-								'buttons'       => isset( $option['buttons'] ) ? $option['buttons'] : null,
-								'wpautop'       => isset( $option['wpautop'] ) ? $option['wpautop'] : null,
-								'teeny'         => isset( $option['teeny'] ) ? $option['teeny'] : null,
-								'tab'           => isset( $option['tab'] ) ? $option['tab'] : null,
-								'tooltip_title' => isset( $option['tooltip_title'] ) ? $option['tooltip_title'] : false,
-								'tooltip_desc'  => isset( $option['tooltip_desc'] ) ? $option['tooltip_desc'] : false,
-
-								'available_header' => isset( $option['available_header'] ) ? $option['available_header'] : null,
-								'selected_header'  => isset( $option['selected_header'] ) ? $option['selected_header'] : null,
-
-								'class' => isset( $option['class'] ) ? $option['class'] : '',
-
-							)
-						);
-					}
-				}
-			}
-
-			register_setting( $this->func . '_settings', $this->func . '_settings', array(
-				$this,
-				'settings_sanitize'
-			) );
-		}
-
-		/**
-		 * Checkbox callback
-		 *
-		 * @access      public
-		 * @since       1.0.0
-		 *
-		 * @param       array $args Arguments passed by the setting
-		 *
-		 * @global      array ${$this->func . '_options'} The plugin options
-		 * @return      void
-		 */
-		public function checkbox_callback( $args ) {
-			global ${$this->func . '_options'};
-
-			$name = ' name="' . $this->func . '_settings[' . $args['id'] . ']"';
-
-			if ( isset( ${$this->func . '_options'}[ $args['id'] ] ) ) {
-				$value = ${$this->func . '_options'}[ $args['id'] ];
-			} else {
-				$value = isset( $args['std'] ) ? $args['std'] : '';
-			}
-
-			$checked = checked( 1, $value, false );
-
-			$html = '<input type="hidden"' . $name . ' value="0" />';
-			$html .= '<input type="checkbox" id="' . $this->func . '_settings[' . $args['id'] . ']"' . $name . ' value="1" ' . $checked . '/>&nbsp;';
-			$html .= '<span class="description"><label for="' . $this->func . '_settings[' . $args['id'] . ']">' . $args['desc'] . '</label></span>';
-
-			echo apply_filters( $this->func . '_after_setting_output', $html, $args );
-		}
-
-
-		/**
-		 * Date callback
-		 *
-		 * @access      public
-		 * @since       1.0.0
-		 *
-		 * @param       array $args Arguments passed by the setting
-		 *
-		 * @global      array ${$this->func . '_options'} The Beacon options
-		 * @return      void
-		 */
-		public function date_callback( $args ) {
-			global ${$this->func . '_options'};
-
-			if ( isset( ${$this->func . '_options'}[ $args['id'] ] ) ) {
-				$value = ${$this->func . '_options'}[ $args['id'] ];
-			} else {
-				$value = isset( $args['std'] ) ? $args['std'] : '';
-			}
-
-			$name     = ' name="' . $this->func . '_settings[' . $args['id'] . ']"';
-			$size     = ( isset( $args['size'] ) && ! is_null( $args['size'] ) ) ? $args['size'] : 'date';
-			$readonly = $args['readonly'] === true ? ' readonly="readonly"' : '';
-
-			$html = '<input type="date" ' . '" class="' . $size . '-text" id="' . $this->func . '_settings[' . $args['id'] . ']"' . $name . ' value="' . esc_attr( stripslashes( $value ) ) . '"' . $readonly . '/>&nbsp;';
-			$html .= '<span class="description"><label for="' . $this->func . '_settings[' . $args['id'] . ']">' . $args['desc'] . '</label></span>';
-
-			echo apply_filters( $this->func . '_after_setting_output', $html, $args );
-		}
-
-
-		/**
-		 * select 2 columns
-		 *
-		 * @access      public
-		 * @since       1.0.0
-		 *
-		 * @param       array $args Arguments passed by the setting
-		 *
-		 * @global      array ${$this->func . '_options'} The Beacon options
-		 * @return      void
-		 */
-		public function select_2_columns_callback( $args ) {
-			global ${$this->func . '_options'};
-
-			if ( isset( ${$this->func . '_options'}[ $args['id'] ] ) ) {
-				$value = ${$this->func . '_options'}[ $args['id'] ];
-			} else {
-				$value = isset( $args['std'] ) ? $args['std'] : '';
-			}
-
-			$value_array = explode( ',', $value );
-
-			$available_header = isset( $args['available_header'] ) ? $args['available_header'] : '';
-
-			$selected_header = isset( $args['selected_header'] ) ? $args['selected_header'] : '';
-
-			$html = '<input type="hidden" value="' . esc_attr( $value ) . '" id="' . $this->func . '_settings[' . $args['id'] . ']" name="' . $this->func . '_settings[' . $args['id'] . ']"' . ' />';
-
-			$html_list_available = '<div class="available-column">';
-			$html_list_available .= '<strong>' . $available_header . '</strong>';
-			$html_list_available .= '<ul id="' . $this->func . '_settings[' . $args['id'] . '][available]" class="available connectedSortable">';
-
-			$html_list_selected = '<div class="selected-column">';
-			$html_list_selected .= '<strong>' . $selected_header . '</strong>';
-			$html_list_selected .= '<ul id="' . $this->func . '_settings[' . $args['id'] . '][selected]" class="selected connectedSortable">';
-
-			foreach ( $args['options'] as $option => $name ) {
-				if ( is_array( $value_array ) && in_array( $option, $value_array ) ) {
-					$html_list_selected .= '<li data-value="' . esc_attr( $option ) . '">' . $name . '</li>';
-				} else {
-					$html_list_available .= '<li data-value="' . esc_attr( $option ) . '">' . $name . '</li>';
-				}
-			}
-
-			$html_list_available .= '</ul></div>';
-			$html_list_selected  .= '</ul></div>';
-
-			$html .= '<div class="select-2-columns">';
-			$html .= $html_list_available;
-			$html .= $html_list_selected;
-
-			$html .= '<div style="clear:both;">';
-
-			$html .= '<script type="text/javascript">';
-			$html .= "\n";
-			$html .= '
-					 jQuery( function() {
-					 	jQuery( "#' . $this->func . '_settings\\\\[' . $args['id'] . '\\\\]\\\\[available\\\\], #' . $this->func . '_settings\\\\[' . $args['id'] . '\\\\]\\\\[selected\\\\]" ).sortable({
-							connectWith: ".connectedSortable",
-					 		deactivate: function( event, ui ) {
-					 			jQuery("#' . $this->func . '_settings\\\\[' . $args['id'] . '\\\\]").val("");
-					 			var val = "";
-					 			jQuery("#' . $this->func . '_settings\\\\[' . $args['id'] . '\\\\]\\\\[selected\\\\] > li").each( function () {
-					 				if ( val != "" ) {
-					 					val = val + ",";
-					 				}
-					 				val = val + jQuery(this).attr("data-value");
-					 			});
-					 			jQuery("#' . $this->func . '_settings\\\\[' . $args['id'] . '\\\\]").val(val);
-       						}
-       					}).disableSelection();
-       				 } );
-					 ';
-			$html .= "\n";
-			$html .= '</script>';
-
-			$html .= '</div>';
-
-			$html .= '<span class="description"><label for="' . $this->func . '_settings[' . $args['id'] . ']">' . $args['desc'] . '</label></span>';
-
-			echo apply_filters( $this->func . '_after_setting_output', $html, $args );
-		}
-
-		public function set_text_domain( $plugin_text_domain ) {
-			$this->plugin_text_domain = $plugin_text_domain;
-		}
-
-		public function get_text_domain() {
-			return $this->plugin_text_domain;
-		}
-
-	}
-}
diff --git a/classes/wpdesk/functions.php b/classes/wpdesk/functions.php
deleted file mode 100644
index 41adbddeb24eff636acc61683900b7a32470b18e..0000000000000000000000000000000000000000
--- a/classes/wpdesk/functions.php
+++ /dev/null
@@ -1,17 +0,0 @@
-<?php
-
-if ( ! defined( 'ABSPATH' ) ) {
-	exit;
-} // Exit if accessed directly
-
-if ( ! function_exists( 'wpdesk_is_plugin_active' ) ) {
-	/**
-	 * @param $plugin_file
-	 *
-	 * @return bool
-	 * @deprecated 1.10 Use requirement class
-	 */
-	function wpdesk_is_plugin_active( $plugin_file ) {
-		return WPDesk_Requirement_Checker_1_10::is_wp_plugin_active($plugin_file);
-	}
-}
diff --git a/classes/wpdesk/interface-plugin-factory.php b/classes/wpdesk/interface-plugin-factory.php
deleted file mode 100644
index 1b2b2722711718f9095661c640ab30ee8c8fef31..0000000000000000000000000000000000000000
--- a/classes/wpdesk/interface-plugin-factory.php
+++ /dev/null
@@ -1,15 +0,0 @@
-<?php
-
-if ( ! defined( 'ABSPATH' ) ) {
-	exit;
-} // Exit if accessed directly
-
-if ( !interface_exists( 'WPDesk_Plugin_Factory_1_10' ) ) {
-	interface WPDesk_Plugin_Factory_1_10 {
-		const WPDESK_FILTER_PLUGIN_CLASS = 'wpdesk_plugin_class';
-
-		static function build_plugin();
-
-		static function get_plugin_instance();
-	}
-}
\ No newline at end of file
diff --git a/classes/wpdesk/lang/wpdesk-plugin-pl_PL.mo b/classes/wpdesk/lang/wpdesk-plugin-pl_PL.mo
deleted file mode 100644
index b13b6e505428f1450a05a0851efbd4d8249bb5f7..0000000000000000000000000000000000000000
Binary files a/classes/wpdesk/lang/wpdesk-plugin-pl_PL.mo and /dev/null differ
diff --git a/classes/wpdesk/lang/wpdesk-plugin-pl_PL.po b/classes/wpdesk/lang/wpdesk-plugin-pl_PL.po
deleted file mode 100644
index 8a56222a0783cd78c27586bbefecbf7178c626b0..0000000000000000000000000000000000000000
--- a/classes/wpdesk/lang/wpdesk-plugin-pl_PL.po
+++ /dev/null
@@ -1,145 +0,0 @@
-msgid ""
-msgstr ""
-"Project-Id-Version: WP Desk Class\n"
-"POT-Creation-Date: 2016-10-27 14:04+0100\n"
-"PO-Revision-Date: 2016-10-27 14:05+0100\n"
-"Last-Translator: wp-kat <admin@wp-kat.net>\n"
-"Language-Team: \n"
-"Language: pl_PL\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"X-Generator: Poedit 1.5.7\n"
-"X-Poedit-Basepath: ..\n"
-"Plural-Forms: nplurals=3; plural=(n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 "
-"|| n%100>=20) ? 1 : 2);\n"
-"X-Poedit-SourceCharset: UTF-8\n"
-"X-Poedit-KeywordsList: __;_e;_n:1,2;_x:1,2c;_ex:1,2c;_nx:4c,1,2;esc_attr__;"
-"esc_attr_e;esc_attr_x:1,2c;esc_html__;esc_html_e;esc_html_x:1,2c;_n_noop:1,2;"
-"_nx_noop:3c,1,2;__ngettext_noop:1,2\n"
-"X-Poedit-SearchPathExcluded-0: settings-api\n"
-"X-Poedit-SearchPath-0: .\n"
-
-#: class-helper.php:34
-#, php-format
-msgid ""
-"The %s%s%s License Key has not been activated, so the plugin is inactive! "
-"%sClick here%s to activate the license key and the plugin."
-msgstr ""
-"Klucz licencyjny wtyczki %s%s%s nie został aktywowany, więc wtyczka jest "
-"nieaktywna! %sKliknij tutaj%s, aby aktywować klucz licencyjny wtyczki."
-
-#: class-plugin.php:217
-msgid "Docs"
-msgstr "Docs"
-
-#: class-plugin.php:218
-msgid "Support"
-msgstr "Wsparcie"
-
-#: class-plugin.php:224
-msgid "Settings"
-msgstr "Ustawienia"
-
-#: class-plugin.php:270
-#, php-format
-msgid ""
-"<a href=\"%s\">Install the WP Desk Helper plugin</a> to activate and get "
-"updates for your WP Desk plugins."
-msgstr ""
-"<a href=\"%s\">Zainstaluj wtyczkę WP Desk Helper</a>, aby aktywować i "
-"otrzymywać aktualizacje wtyczek WP Desk."
-
-#: class-plugin.php:276
-#, php-format
-msgid ""
-"<a href=\"%s\">Activate the WP Desk Helper plugin</a> to activate and get "
-"updates for your WP Desk plugins."
-msgstr ""
-"<a href=\"%s\">Włącz wtyczkę WP Desk Helper</a>, aby aktywować i otrzymywać "
-"aktualizacje wtyczek WP Desk."
-
-#: class-settings.php:85 settings-api/class.s214-settings.php:1211
-msgid "Insert Image"
-msgstr "Wstaw obrazek"
-
-#: class-settings.php:86 settings-api/class.s214-settings.php:1212
-msgid "Select Image"
-msgstr "Wybierz obrazek"
-
-#: settings-api/class.s214-settings.php:144
-#: settings-api/class.s214-settings.php:146
-msgid "Section214 Settings"
-msgstr "Ustawienia Section214"
-
-#: settings-api/class.s214-settings.php:592
-msgid "Settings updated."
-msgstr "Ustawienia zostały zaktualizowane."
-
-#: settings-api/class.s214-settings.php:977
-msgid ""
-"To copy the system info, click below then press Ctrl + C (PC) or Cmd + C "
-"(Mac)."
-msgstr ""
-"Aby skopiować informacje systemowe kliknij poniżej a następnie wciśnij Ctrl"
-"+C lub Cmd+C."
-
-#: settings-api/class.s214-settings.php:980
-msgid "Download System Info File"
-msgstr "Pobierz plik z informacjami systemowymi"
-
-#: settings-api/class.s214-settings.php:1060
-msgid "Upload File"
-msgstr "Załaduj plik"
-
-#: settings-api/class.s214-settings.php:1090
-msgid "Deactivate License"
-msgstr "Deaktywacja licencji"
-
-#: settings-api/class.s214-settings.php:1121
-#, php-format
-msgid ""
-"The callback function used for the <strong>%s</strong> setting is missing."
-msgstr "Funkcja callback dla <strong>%s</strong> nie istnieje"
-
-#~ msgid "Licensing"
-#~ msgstr "Licencjonowanie"
-
-#~ msgid "%1$s License Key"
-#~ msgstr "Klucz licencji %1$s"
-
-#~ msgid ""
-#~ "Please enter your license key to enable automatic updates and support."
-#~ msgstr ""
-#~ "Wprowadz klucz licencji aby aktywować automatyczne aktualizacje i support."
-
-#~ msgid "Nonce verification failed"
-#~ msgstr "Błąd weryfikacji nonce"
-
-#~ msgid "Error"
-#~ msgstr "Błąd"
-
-#~ msgid "This license does not belong to the product you have entered it for."
-#~ msgstr "Licencja dotyczy innego produktu."
-
-#~ msgid "This license does not have any activations left"
-#~ msgstr "Licencja nie posiada wolnych aktywacji."
-
-#~ msgid "This license key is expired. Please renew it."
-#~ msgstr "Klucz licencyjny wygasł. Proszę go odnowić."
-
-#~ msgid ""
-#~ "There was a problem activating your license key, please try again or "
-#~ "contact support. Error code: %s"
-#~ msgstr ""
-#~ "Wystąpił problem przy aktywacji klucza licencji, proszę spróbować "
-#~ "ponownie lub skontaktować się z supportem. Kod błędu: %s"
-
-#~ msgid ""
-#~ "There is a new version of %1$s available. %2$sView version %3$s details"
-#~ "%4$s."
-#~ msgstr ""
-#~ "Jest dostępna nowa wersja %1$s . %2$sZobacz szczegóły %3$s wersji %4$s."
-
-#~ msgid "You do not have permission to install plugin updates"
-#~ msgstr "Brak uprawnień do instalacji aktualizacji"
diff --git a/classes/wpdesk/settings-api/assets/css/admin.css b/classes/wpdesk/settings-api/assets/css/admin.css
deleted file mode 100644
index f44c0f5e5fdc3167870ee919cbf80945a451257a..0000000000000000000000000000000000000000
--- a/classes/wpdesk/settings-api/assets/css/admin.css
+++ /dev/null
@@ -1,35 +0,0 @@
-/* Fix color picker label alignment
--------------------------------------------------------------- */
-.s214-color-picker-label {
-    position: absolute;
-    display: inline-block;
-    padding-top: 4px;
-}
-
-/* System info styles
--------------------------------------------------------------- */
-#system-info-textarea {
-    width: 800px;
-    height: 400px;
-    font-family: Menlo, Monaco, monospace;
-    background: none;
-    white-space: pre;
-    overflow: auto;
-    display: block;
-}
-
-/* Tooltips
--------------------------------------------------------------- */
-.s214-help-tip {
-    cursor: help;
-}
-
-.ui-tooltip {
-    background: #333 !important;
-    border-radius: 3px !important;
-    box-shadow: 1px 1px 2px 1px rgba(214,214,214,0.5);
-    color: #dedede !important;
-    max-width: 300px;
-    padding: 7px;
-    text-rendering: optimizeLegibility;
-}
diff --git a/classes/wpdesk/settings-api/assets/css/admin.min.css b/classes/wpdesk/settings-api/assets/css/admin.min.css
deleted file mode 100644
index 3c9fbacdcf1aff26cd31dfa048806b3d1f5d780b..0000000000000000000000000000000000000000
--- a/classes/wpdesk/settings-api/assets/css/admin.min.css
+++ /dev/null
@@ -1 +0,0 @@
-.s214-color-picker-label{position:absolute;display:inline-block;padding-top:4px}#system-info-textarea{width:800px;height:400px;font-family:Menlo,Monaco,monospace;background:0 0;white-space:pre;overflow:auto;display:block}.s214-help-tip{cursor:help}.ui-tooltip{background:#333!important;border-radius:3px!important;box-shadow:1px 1px 2px 1px rgba(214,214,214,.5);color:#dedede!important;max-width:300px;padding:7px;text-rendering:optimizeLegibility}
diff --git a/classes/wpdesk/settings-api/assets/css/jquery-ui-classic.min.css b/classes/wpdesk/settings-api/assets/css/jquery-ui-classic.min.css
deleted file mode 100644
index d970fec314ad38adfe8275d15ca528c79a2dc2f3..0000000000000000000000000000000000000000
--- a/classes/wpdesk/settings-api/assets/css/jquery-ui-classic.min.css
+++ /dev/null
@@ -1 +0,0 @@
-.ui-helper-hidden{display:none}.ui-helper-hidden-accessible{position:absolute!important;clip:rect(1px 1px 1px 1px);clip:rect(1px,1px,1px,1px)}.ui-helper-reset{margin:0;padding:0;border:0;outline:0;line-height:1.3;text-decoration:none;font-size:100%;list-style:none}.ui-helper-clearfix:after{content:".";display:block;height:0;clear:both;visibility:hidden}.ui-helper-clearfix{display:inline-block}/*\*/* html .ui-helper-clearfix{height:1%}.ui-helper-clearfix{display:block}/**/.ui-helper-zfix{width:100%;height:100%;top:0;left:0;position:absolute;opacity:0;filter:Alpha(Opacity=0)}.ui-state-disabled{cursor:default!important}.ui-icon{display:block;text-indent:-99999px;overflow:hidden;background-repeat:no-repeat}.ui-widget-overlay{position:absolute;top:0;left:0;width:100%;height:100%}.ui-widget{font-family:sans-serif;font-size:12px}.ui-widget .ui-widget{font-size:1em}.ui-widget input,.ui-widget select,.ui-widget textarea,.ui-widget button{font-family:sans-serif;font-size:1em}.ui-widget-content{border:1px solid #d1e5ee;background:#fff;color:#333}.ui-widget-header{border:1px solid #d1e5ee;background-color:#f5fafd;background-image:-ms-linear-gradient(top,#f7fcfe,#eff8ff);background-image:-moz-linear-gradient(top,#f7fcfe,#eff8ff);background-image:-o-linear-gradient(top,#f7fcfe,#eff8ff);background-image:-webkit-gradient(linear,left top,left bottom,from(#f7fcfe),to(#eff8ff));background-image:-webkit-linear-gradient(top,#f7fcfe,#eff8ff);background-image:linear-gradient(top,#f7fcfe,#eff8ff);color:#333;font-weight:bold}.ui-widget-header a{color:#333}.ui-state-default,.ui-widget-content .ui-state-default,.ui-widget-header .ui-state-default{border:1px solid #d1e5ee;background-color:#f5fafd;background-image:-ms-linear-gradient(top,#f7fcfe,#eff8ff);background-image:-moz-linear-gradient(top,#f7fcfe,#eff8ff);background-image:-o-linear-gradient(top,#f7fcfe,#eff8ff);background-image:-webkit-gradient(linear,left top,left bottom,from(#f7fcfe),to(#eff8ff));background-image:-webkit-linear-gradient(top,#f7fcfe,#eff8ff);background-image:linear-gradient(top,#f7fcfe,#eff8ff);font-weight:normal;color:#333}.ui-state-default a,.ui-state-default a:link,.ui-state-default a:visited{color:#333;text-decoration:none}.ui-state-hover,.ui-widget-content .ui-state-hover,.ui-widget-header .ui-state-hover,.ui-state-focus,.ui-widget-content .ui-state-focus,.ui-widget-header .ui-state-focus{border:1px solid #b8d7e5;background-color:#f7fcfe;background-image:-ms-linear-gradient(top,#eff8ff,#f7fcfe);background-image:-moz-linear-gradient(top,#eff8ff,#f7fcfe);background-image:-o-linear-gradient(top,#eff8ff,#f7fcfe);background-image:-webkit-gradient(linear,left top,left bottom,from(#eff8ff),to(#f7fcfe));background-image:-webkit-linear-gradient(top,#eff8ff,#f7fcfe);background-image:linear-gradient(top,#eff8ff,#f7fcfe);font-weight:normal;color:#000}.ui-state-hover a,.ui-state-hover a:hover{color:#000;text-decoration:none}.ui-state-active,.ui-widget-content .ui-state-active,.ui-widget-header .ui-state-active{border:1px solid #d1e5ee;background:#fff;font-weight:normal;color:#333}.ui-state-active a,.ui-state-active a:link,.ui-state-active a:visited{color:#333;text-decoration:none}.ui-widget :active{outline:0}.ui-state-highlight,.ui-widget-content .ui-state-highlight,.ui-widget-header .ui-state-highlight{border:1px solid #e6db55;background:#ffffe0;color:#333}.ui-state-highlight a,.ui-widget-content .ui-state-highlight a,.ui-widget-header .ui-state-highlight a{color:#333}.ui-state-error,.ui-widget-content .ui-state-error,.ui-widget-header .ui-state-error{border:1px solid #c00;background:#ffebe8;color:#c00}.ui-state-error a,.ui-widget-content .ui-state-error a,.ui-widget-header .ui-state-error a{color:#c00}.ui-state-error-text,.ui-widget-content .ui-state-error-text,.ui-widget-header .ui-state-error-text{color:#c00}.ui-priority-primary,.ui-widget-content .ui-priority-primary,.ui-widget-header .ui-priority-primary{font-weight:bold}.ui-priority-secondary,.ui-widget-content .ui-priority-secondary,.ui-widget-header .ui-priority-secondary{opacity:.7;filter:Alpha(Opacity=70);font-weight:normal}.ui-state-disabled,.ui-widget-content .ui-state-disabled,.ui-widget-header .ui-state-disabled{opacity:.35;filter:Alpha(Opacity=35);background-image:none}.ui-icon{width:16px;height:16px;background-image:url(../images/ui-icons_333333_256x240.png)}.ui-widget-content .ui-icon{background-image:url(../images/ui-icons_333333_256x240.png)}.ui-widget-header .ui-icon{background-image:url(../images/ui-icons_999999_256x240.png)}.ui-state-default .ui-icon{background-image:url(../images/ui-icons_333333_256x240.png)}.ui-state-hover .ui-icon,.ui-state-focus .ui-icon{background-image:url(../images/ui-icons_333333_256x240.png)}.ui-state-active .ui-icon{background-image:url(../images/ui-icons_333333_256x240.png)}.ui-state-highlight .ui-icon{background-image:url(../images/ui-icons_21759b_256x240.png)}.ui-state-error .ui-icon,.ui-state-error-text .ui-icon{background-image:url(../images/ui-icons_cc0000_256x240.png)}.ui-icon-carat-1-n{background-position:0 0}.ui-icon-carat-1-ne{background-position:-16px 0}.ui-icon-carat-1-e{background-position:-32px 0}.ui-icon-carat-1-se{background-position:-48px 0}.ui-icon-carat-1-s{background-position:-64px 0}.ui-icon-carat-1-sw{background-position:-80px 0}.ui-icon-carat-1-w{background-position:-96px 0}.ui-icon-carat-1-nw{background-position:-112px 0}.ui-icon-carat-2-n-s{background-position:-128px 0}.ui-icon-carat-2-e-w{background-position:-144px 0}.ui-icon-triangle-1-n{background-position:0 -16px}.ui-icon-triangle-1-ne{background-position:-16px -16px}.ui-icon-triangle-1-e{background-position:-32px -16px}.ui-icon-triangle-1-se{background-position:-48px -16px}.ui-icon-triangle-1-s{background-position:-64px -16px}.ui-icon-triangle-1-sw{background-position:-80px -16px}.ui-icon-triangle-1-w{background-position:-96px -16px}.ui-icon-triangle-1-nw{background-position:-112px -16px}.ui-icon-triangle-2-n-s{background-position:-128px -16px}.ui-icon-triangle-2-e-w{background-position:-144px -16px}.ui-icon-arrow-1-n{background-position:0 -32px}.ui-icon-arrow-1-ne{background-position:-16px -32px}.ui-icon-arrow-1-e{background-position:-32px -32px}.ui-icon-arrow-1-se{background-position:-48px -32px}.ui-icon-arrow-1-s{background-position:-64px -32px}.ui-icon-arrow-1-sw{background-position:-80px -32px}.ui-icon-arrow-1-w{background-position:-96px -32px}.ui-icon-arrow-1-nw{background-position:-112px -32px}.ui-icon-arrow-2-n-s{background-position:-128px -32px}.ui-icon-arrow-2-ne-sw{background-position:-144px -32px}.ui-icon-arrow-2-e-w{background-position:-160px -32px}.ui-icon-arrow-2-se-nw{background-position:-176px -32px}.ui-icon-arrowstop-1-n{background-position:-192px -32px}.ui-icon-arrowstop-1-e{background-position:-208px -32px}.ui-icon-arrowstop-1-s{background-position:-224px -32px}.ui-icon-arrowstop-1-w{background-position:-240px -32px}.ui-icon-arrowthick-1-n{background-position:0 -48px}.ui-icon-arrowthick-1-ne{background-position:-16px -48px}.ui-icon-arrowthick-1-e{background-position:-32px -48px}.ui-icon-arrowthick-1-se{background-position:-48px -48px}.ui-icon-arrowthick-1-s{background-position:-64px -48px}.ui-icon-arrowthick-1-sw{background-position:-80px -48px}.ui-icon-arrowthick-1-w{background-position:-96px -48px}.ui-icon-arrowthick-1-nw{background-position:-112px -48px}.ui-icon-arrowthick-2-n-s{background-position:-128px -48px}.ui-icon-arrowthick-2-ne-sw{background-position:-144px -48px}.ui-icon-arrowthick-2-e-w{background-position:-160px -48px}.ui-icon-arrowthick-2-se-nw{background-position:-176px -48px}.ui-icon-arrowthickstop-1-n{background-position:-192px -48px}.ui-icon-arrowthickstop-1-e{background-position:-208px -48px}.ui-icon-arrowthickstop-1-s{background-position:-224px -48px}.ui-icon-arrowthickstop-1-w{background-position:-240px -48px}.ui-icon-arrowreturnthick-1-w{background-position:0 -64px}.ui-icon-arrowreturnthick-1-n{background-position:-16px -64px}.ui-icon-arrowreturnthick-1-e{background-position:-32px -64px}.ui-icon-arrowreturnthick-1-s{background-position:-48px -64px}.ui-icon-arrowreturn-1-w{background-position:-64px -64px}.ui-icon-arrowreturn-1-n{background-position:-80px -64px}.ui-icon-arrowreturn-1-e{background-position:-96px -64px}.ui-icon-arrowreturn-1-s{background-position:-112px -64px}.ui-icon-arrowrefresh-1-w{background-position:-128px -64px}.ui-icon-arrowrefresh-1-n{background-position:-144px -64px}.ui-icon-arrowrefresh-1-e{background-position:-160px -64px}.ui-icon-arrowrefresh-1-s{background-position:-176px -64px}.ui-icon-arrow-4{background-position:0 -80px}.ui-icon-arrow-4-diag{background-position:-16px -80px}.ui-icon-extlink{background-position:-32px -80px}.ui-icon-newwin{background-position:-48px -80px}.ui-icon-refresh{background-position:-64px -80px}.ui-icon-shuffle{background-position:-80px -80px}.ui-icon-transfer-e-w{background-position:-96px -80px}.ui-icon-transferthick-e-w{background-position:-112px -80px}.ui-icon-folder-collapsed{background-position:0 -96px}.ui-icon-folder-open{background-position:-16px -96px}.ui-icon-document{background-position:-32px -96px}.ui-icon-document-b{background-position:-48px -96px}.ui-icon-note{background-position:-64px -96px}.ui-icon-mail-closed{background-position:-80px -96px}.ui-icon-mail-open{background-position:-96px -96px}.ui-icon-suitcase{background-position:-112px -96px}.ui-icon-comment{background-position:-128px -96px}.ui-icon-person{background-position:-144px -96px}.ui-icon-print{background-position:-160px -96px}.ui-icon-trash{background-position:-176px -96px}.ui-icon-locked{background-position:-192px -96px}.ui-icon-unlocked{background-position:-208px -96px}.ui-icon-bookmark{background-position:-224px -96px}.ui-icon-tag{background-position:-240px -96px}.ui-icon-home{background-position:0 -112px}.ui-icon-flag{background-position:-16px -112px}.ui-icon-calendar{background-position:-32px -112px}.ui-icon-cart{background-position:-48px -112px}.ui-icon-pencil{background-position:-64px -112px}.ui-icon-clock{background-position:-80px -112px}.ui-icon-disk{background-position:-96px -112px}.ui-icon-calculator{background-position:-112px -112px}.ui-icon-zoomin{background-position:-128px -112px}.ui-icon-zoomout{background-position:-144px -112px}.ui-icon-search{background-position:-160px -112px}.ui-icon-wrench{background-position:-176px -112px}.ui-icon-gear{background-position:-192px -112px}.ui-icon-heart{background-position:-208px -112px}.ui-icon-star{background-position:-224px -112px}.ui-icon-link{background-position:-240px -112px}.ui-icon-cancel{background-position:0 -128px}.ui-icon-plus{background-position:-16px -128px}.ui-icon-plusthick{background-position:-32px -128px}.ui-icon-minus{background-position:-48px -128px}.ui-icon-minusthick{background-position:-64px -128px}.ui-icon-close{background-position:-80px -128px}.ui-icon-closethick{background-position:-96px -128px}.ui-icon-key{background-position:-112px -128px}.ui-icon-lightbulb{background-position:-128px -128px}.ui-icon-scissors{background-position:-144px -128px}.ui-icon-clipboard{background-position:-160px -128px}.ui-icon-copy{background-position:-176px -128px}.ui-icon-contact{background-position:-192px -128px}.ui-icon-image{background-position:-208px -128px}.ui-icon-video{background-position:-224px -128px}.ui-icon-script{background-position:-240px -128px}.ui-icon-alert{background-position:0 -144px}.ui-icon-info{background-position:-16px -144px}.ui-icon-notice{background-position:-32px -144px}.ui-icon-help{background-position:-48px -144px}.ui-icon-check{background-position:-64px -144px}.ui-icon-bullet{background-position:-80px -144px}.ui-icon-radio-off{background-position:-96px -144px}.ui-icon-radio-on{background-position:-112px -144px}.ui-icon-pin-w{background-position:-128px -144px}.ui-icon-pin-s{background-position:-144px -144px}.ui-icon-play{background-position:0 -160px}.ui-icon-pause{background-position:-16px -160px}.ui-icon-seek-next{background-position:-32px -160px}.ui-icon-seek-prev{background-position:-48px -160px}.ui-icon-seek-end{background-position:-64px -160px}.ui-icon-seek-start{background-position:-80px -160px}.ui-icon-seek-first{background-position:-80px -160px}.ui-icon-stop{background-position:-96px -160px}.ui-icon-eject{background-position:-112px -160px}.ui-icon-volume-off{background-position:-128px -160px}.ui-icon-volume-on{background-position:-144px -160px}.ui-icon-power{background-position:0 -176px}.ui-icon-signal-diag{background-position:-16px -176px}.ui-icon-signal{background-position:-32px -176px}.ui-icon-battery-0{background-position:-48px -176px}.ui-icon-battery-1{background-position:-64px -176px}.ui-icon-battery-2{background-position:-80px -176px}.ui-icon-battery-3{background-position:-96px -176px}.ui-icon-circle-plus{background-position:0 -192px}.ui-icon-circle-minus{background-position:-16px -192px}.ui-icon-circle-close{background-position:-32px -192px}.ui-icon-circle-triangle-e{background-position:-48px -192px}.ui-icon-circle-triangle-s{background-position:-64px -192px}.ui-icon-circle-triangle-w{background-position:-80px -192px}.ui-icon-circle-triangle-n{background-position:-96px -192px}.ui-icon-circle-arrow-e{background-position:-112px -192px}.ui-icon-circle-arrow-s{background-position:-128px -192px}.ui-icon-circle-arrow-w{background-position:-144px -192px}.ui-icon-circle-arrow-n{background-position:-160px -192px}.ui-icon-circle-zoomin{background-position:-176px -192px}.ui-icon-circle-zoomout{background-position:-192px -192px}.ui-icon-circle-check{background-position:-208px -192px}.ui-icon-circlesmall-plus{background-position:0 -208px}.ui-icon-circlesmall-minus{background-position:-16px -208px}.ui-icon-circlesmall-close{background-position:-32px -208px}.ui-icon-squaresmall-plus{background-position:-48px -208px}.ui-icon-squaresmall-minus{background-position:-64px -208px}.ui-icon-squaresmall-close{background-position:-80px -208px}.ui-icon-grip-dotted-vertical{background-position:0 -224px}.ui-icon-grip-dotted-horizontal{background-position:-16px -224px}.ui-icon-grip-solid-vertical{background-position:-32px -224px}.ui-icon-grip-solid-horizontal{background-position:-48px -224px}.ui-icon-gripsmall-diagonal-se{background-position:-64px -224px}.ui-icon-grip-diagonal-se{background-position:-80px -224px}.ui-corner-all,.ui-corner-top,.ui-corner-left,.ui-corner-tl{-moz-border-radius-topleft:3px;-webkit-border-top-left-radius:3px;-khtml-border-top-left-radius:3px;border-top-left-radius:3px}.ui-corner-all,.ui-corner-top,.ui-corner-right,.ui-corner-tr{-moz-border-radius-topright:3px;-webkit-border-top-right-radius:3px;-khtml-border-top-right-radius:3px;border-top-right-radius:3px}.ui-corner-all,.ui-corner-bottom,.ui-corner-left,.ui-corner-bl{-moz-border-radius-bottomleft:3px;-webkit-border-bottom-left-radius:3px;-khtml-border-bottom-left-radius:3px;border-bottom-left-radius:3px}.ui-corner-all,.ui-corner-bottom,.ui-corner-right,.ui-corner-br{-moz-border-radius-bottomright:3px;-webkit-border-bottom-right-radius:3px;-khtml-border-bottom-right-radius:3px;border-bottom-right-radius:3px}.ui-widget-overlay{background:#000;opacity:.6;filter:Alpha(Opacity=60)}.ui-widget-shadow{box-shadow:0 0 16px rgba(0,0,0,0.3)}.ui-resizable{position:relative}.ui-resizable-handle{position:absolute;font-size:.1px;z-index:99999;display:block}.ui-resizable-disabled .ui-resizable-handle,.ui-resizable-autohide .ui-resizable-handle{display:none}.ui-resizable-n{cursor:n-resize;height:7px;width:100%;top:-5px;left:0}.ui-resizable-s{cursor:s-resize;height:7px;width:100%;bottom:-5px;left:0}.ui-resizable-e{cursor:e-resize;width:7px;right:-5px;top:0;height:100%}.ui-resizable-w{cursor:w-resize;width:7px;left:-5px;top:0;height:100%}.ui-resizable-se{cursor:se-resize;width:12px;height:12px;right:1px;bottom:1px}.ui-resizable-sw{cursor:sw-resize;width:9px;height:9px;left:-5px;bottom:-5px}.ui-resizable-nw{cursor:nw-resize;width:9px;height:9px;left:-5px;top:-5px}.ui-resizable-ne{cursor:ne-resize;width:9px;height:9px;right:-5px;top:-5px}.ui-selectable-helper{position:absolute;z-index:100;border:1px dotted black}.ui-accordion{width:100%}.ui-accordion .ui-accordion-header{cursor:pointer;position:relative;margin-top:1px;zoom:1}.ui-accordion .ui-accordion-li-fix{display:inline}.ui-accordion .ui-accordion-header-active{border-bottom:0!important}.ui-accordion .ui-accordion-header a{display:block;font-size:1em;padding:.5em .5em .5em .7em}.ui-accordion-icons .ui-accordion-header a{padding-left:2.2em}.ui-accordion .ui-accordion-header .ui-icon{position:absolute;left:.5em;top:50%;margin-top:-8px}.ui-accordion .ui-accordion-content{padding:1em 2.2em;border-top:0;margin-top:-2px;position:relative;top:1px;margin-bottom:2px;overflow:auto;display:none;zoom:1}.ui-accordion .ui-accordion-content-active{display:block}.ui-autocomplete{position:absolute;cursor:default}* html .ui-autocomplete{width:1px}.ui-menu{list-style:none;padding:2px;margin:0;display:block;float:left}.ui-menu .ui-menu{margin-top:-3px}.ui-menu .ui-menu-item{margin:0;padding:0;zoom:1;float:left;clear:left;width:100%}.ui-menu .ui-menu-item a{text-decoration:none;display:block;padding:.2em .4em;line-height:1.5;zoom:1}.ui-menu .ui-menu-item a.ui-state-hover,.ui-menu .ui-menu-item a.ui-state-active{font-weight:normal;margin:-1px}.ui-button{display:inline-block;position:relative;padding:0;margin-right:.1em;text-decoration:none!important;cursor:pointer;text-align:center;zoom:1;overflow:visible}.ui-button-icon-only{width:2.2em}button.ui-button-icon-only{width:2.4em}.ui-button-icons-only{width:3.4em}button.ui-button-icons-only{width:3.7em}.ui-button .ui-button-text{display:block;line-height:1.4}.ui-button-text-only .ui-button-text{padding:.4em 1em}.ui-button-icon-only .ui-button-text,.ui-button-icons-only .ui-button-text{padding:.4em;text-indent:-9999999px}.ui-button-text-icon-primary .ui-button-text,.ui-button-text-icons .ui-button-text{padding:.4em 1em .4em 2.1em}.ui-button-text-icon-secondary .ui-button-text,.ui-button-text-icons .ui-button-text{padding:.4em 2.1em .4em 1em}.ui-button-text-icons .ui-button-text{padding-left:2.1em;padding-right:2.1em}input.ui-button{padding:.4em 1em}.ui-button-icon-only .ui-icon,.ui-button-text-icon-primary .ui-icon,.ui-button-text-icon-secondary .ui-icon,.ui-button-text-icons .ui-icon,.ui-button-icons-only .ui-icon{position:absolute;top:50%;margin-top:-8px}.ui-button-icon-only .ui-icon{left:50%;margin-left:-8px}.ui-button-text-icon-primary .ui-button-icon-primary,.ui-button-text-icons .ui-button-icon-primary,.ui-button-icons-only .ui-button-icon-primary{left:.5em}.ui-button-text-icon-secondary .ui-button-icon-secondary,.ui-button-text-icons .ui-button-icon-secondary,.ui-button-icons-only .ui-button-icon-secondary{right:.5em}.ui-button-text-icons .ui-button-icon-secondary,.ui-button-icons-only .ui-button-icon-secondary{right:.5em}.ui-buttonset{margin-right:7px}.ui-buttonset .ui-button{margin-left:0;margin-right:-.3em}button.ui-button::-moz-focus-inner{border:0;padding:0}.ui-dialog{position:absolute;padding:.2em;width:300px;overflow:hidden}.ui-dialog .ui-dialog-titlebar{padding:.4em 1em;position:relative}.ui-dialog .ui-dialog-title{float:left;margin:.1em 16px .1em 0}.ui-dialog .ui-dialog-titlebar-close{position:absolute;right:.3em;top:50%;width:19px;margin:-10px 0 0 0;padding:1px;height:18px}.ui-dialog .ui-dialog-titlebar-close span{display:block;margin:1px}.ui-dialog .ui-dialog-titlebar-close:hover,.ui-dialog .ui-dialog-titlebar-close:focus{padding:0}.ui-dialog .ui-dialog-content{position:relative;border:0;padding:.5em 1em;background:0;overflow:auto;zoom:1}.ui-dialog .ui-dialog-buttonpane{text-align:left;border-width:1px 0 0 0;background-image:none;margin:.5em 0 0 0;padding:.3em 1em .5em .4em}.ui-dialog .ui-dialog-buttonpane .ui-dialog-buttonset{float:right}.ui-dialog .ui-dialog-buttonpane button{margin:.5em .4em .5em 0;cursor:pointer}.ui-dialog .ui-resizable-se{width:14px;height:14px;right:3px;bottom:3px}.ui-draggable .ui-dialog-titlebar{cursor:move}.ui-slider{position:relative;text-align:left}.ui-slider .ui-slider-handle{position:absolute;z-index:2;width:1.2em;height:1.2em;cursor:default}.ui-slider .ui-slider-range{position:absolute;z-index:1;font-size:.7em;display:block;border:0;background-position:0 0}.ui-slider-horizontal{height:.8em}.ui-slider-horizontal .ui-slider-handle{top:-.3em;margin-left:-.6em}.ui-slider-horizontal .ui-slider-range{top:0;height:100%}.ui-slider-horizontal .ui-slider-range-min{left:0}.ui-slider-horizontal .ui-slider-range-max{right:0}.ui-slider-vertical{width:.8em;height:100px}.ui-slider-vertical .ui-slider-handle{left:-.3em;margin-left:0;margin-bottom:-.6em}.ui-slider-vertical .ui-slider-range{left:0;width:100%}.ui-slider-vertical .ui-slider-range-min{bottom:0}.ui-slider-vertical .ui-slider-range-max{top:0}.ui-tabs{position:relative;padding:.2em;zoom:1}.ui-tabs .ui-tabs-nav{margin:0;padding:.2em .2em 0}.ui-tabs .ui-tabs-nav li{list-style:none;float:left;position:relative;top:1px;margin:0 .2em 1px 0;border-bottom:0!important;padding:0;white-space:nowrap}.ui-tabs .ui-tabs-nav li a{float:left;padding:.5em 1em;text-decoration:none}.ui-tabs .ui-tabs-nav li.ui-tabs-selected{margin-bottom:0;padding-bottom:1px}.ui-tabs .ui-tabs-nav li.ui-tabs-selected a,.ui-tabs .ui-tabs-nav li.ui-state-disabled a,.ui-tabs .ui-tabs-nav li.ui-state-processing a{cursor:text}.ui-tabs .ui-tabs-nav li a,.ui-tabs.ui-tabs-collapsible .ui-tabs-nav li.ui-tabs-selected a{cursor:pointer}.ui-tabs .ui-tabs-panel{display:block;border-width:0;padding:1em 1.4em;background:0}.ui-tabs .ui-tabs-hide{display:none!important}.ui-datepicker{width:17em;padding:.2em .2em 0;display:none}.ui-datepicker .ui-datepicker-header{position:relative;padding:.2em 0}.ui-datepicker .ui-datepicker-prev,.ui-datepicker .ui-datepicker-next{position:absolute;top:2px;width:1.8em;height:1.8em}.ui-datepicker .ui-datepicker-prev-hover,.ui-datepicker .ui-datepicker-next-hover{top:1px}.ui-datepicker .ui-datepicker-prev{left:2px}.ui-datepicker .ui-datepicker-next{right:2px}.ui-datepicker .ui-datepicker-prev-hover{left:1px}.ui-datepicker .ui-datepicker-next-hover{right:1px}.ui-datepicker .ui-datepicker-prev span,.ui-datepicker .ui-datepicker-next span{display:block;position:absolute;left:50%;margin-left:-8px;top:50%;margin-top:-8px}.ui-datepicker .ui-datepicker-title{margin:0 2.3em;line-height:1.8em;text-align:center}.ui-datepicker .ui-datepicker-title select{font-size:1em;margin:1px 0}.ui-datepicker select.ui-datepicker-month-year{width:100%}.ui-datepicker select.ui-datepicker-month,.ui-datepicker select.ui-datepicker-year{width:49%}.ui-datepicker table{width:100%;font-size:.9em;border-collapse:collapse;margin:0 0 .4em}.ui-datepicker th{padding:.7em .3em;text-align:center;font-weight:bold;border:0}.ui-datepicker td{border:0;padding:1px}.ui-datepicker td span,.ui-datepicker td a{display:block;padding:.2em;text-align:right;text-decoration:none}.ui-datepicker .ui-datepicker-buttonpane{background-image:none;margin:.7em 0 0 0;padding:0 .2em;border-left:0;border-right:0;border-bottom:0}.ui-datepicker .ui-datepicker-buttonpane button{float:right;margin:.5em .2em .4em;cursor:pointer;padding:.2em .6em .3em .6em;width:auto;overflow:visible}.ui-datepicker .ui-datepicker-buttonpane button.ui-datepicker-current{float:left}.ui-datepicker.ui-datepicker-multi{width:auto}.ui-datepicker-multi .ui-datepicker-group{float:left}.ui-datepicker-multi .ui-datepicker-group table{width:95%;margin:0 auto .4em}.ui-datepicker-multi-2 .ui-datepicker-group{width:50%}.ui-datepicker-multi-3 .ui-datepicker-group{width:33.3%}.ui-datepicker-multi-4 .ui-datepicker-group{width:25%}.ui-datepicker-multi .ui-datepicker-group-last .ui-datepicker-header{border-left-width:0}.ui-datepicker-multi .ui-datepicker-group-middle .ui-datepicker-header{border-left-width:0}.ui-datepicker-multi .ui-datepicker-buttonpane{clear:left}.ui-datepicker-row-break{clear:both;width:100%;font-size:0}.ui-datepicker-rtl{direction:rtl}.ui-datepicker-rtl .ui-datepicker-prev{right:2px;left:auto}.ui-datepicker-rtl .ui-datepicker-next{left:2px;right:auto}.ui-datepicker-rtl .ui-datepicker-prev:hover{right:1px;left:auto}.ui-datepicker-rtl .ui-datepicker-next:hover{left:1px;right:auto}.ui-datepicker-rtl .ui-datepicker-buttonpane{clear:right}.ui-datepicker-rtl .ui-datepicker-buttonpane button{float:left}.ui-datepicker-rtl .ui-datepicker-buttonpane button.ui-datepicker-current{float:right}.ui-datepicker-rtl .ui-datepicker-group{float:right}.ui-datepicker-rtl .ui-datepicker-group-last .ui-datepicker-header{border-right-width:0;border-left-width:1px}.ui-datepicker-rtl .ui-datepicker-group-middle .ui-datepicker-header{border-right-width:0;border-left-width:1px}.ui-datepicker-cover{display:none;display:block;position:absolute;z-index:-1;filter:mask();top:-4px;left:-4px;width:200px;height:200px}.ui-progressbar{height:2em;text-align:left}.ui-progressbar .ui-progressbar-value{margin:-1px;height:100%}.ui-progressbar .ui-widget-header{background-color:#83b4d8;background-image:linear-gradient(bottom,#72a7cf 0,#90c5ee 100%);background-image:-o-linear-gradient(bottom,#72a7cf 0,#90c5ee 100%);background-image:-moz-linear-gradient(bottom,#72a7cf 0,#90c5ee 100%);background-image:-webkit-linear-gradient(bottom,#72a7cf 0,#90c5ee 100%);background-image:-ms-linear-gradient(bottom,#72a7cf 0,#90c5ee 100%)}
diff --git a/classes/wpdesk/settings-api/assets/css/jquery-ui-fresh.min.css b/classes/wpdesk/settings-api/assets/css/jquery-ui-fresh.min.css
deleted file mode 100644
index 8f649acd6d6662b1624f7e5b57996aed2d978600..0000000000000000000000000000000000000000
--- a/classes/wpdesk/settings-api/assets/css/jquery-ui-fresh.min.css
+++ /dev/null
@@ -1 +0,0 @@
-.ui-helper-hidden{display:none}.ui-helper-hidden-accessible{position:absolute!important;clip:rect(1px 1px 1px 1px);clip:rect(1px,1px,1px,1px)}.ui-helper-reset{margin:0;padding:0;border:0;outline:0;line-height:1.3;text-decoration:none;font-size:100%;list-style:none}.ui-helper-clearfix:after{content:".";display:block;height:0;clear:both;visibility:hidden}.ui-helper-clearfix{display:inline-block}/*\*/* html .ui-helper-clearfix{height:1%}.ui-helper-clearfix{display:block}/**/.ui-helper-zfix{width:100%;height:100%;top:0;left:0;position:absolute;opacity:0;filter:Alpha(Opacity=0)}.ui-state-disabled{cursor:default!important}.ui-icon{display:block;text-indent:-99999px;overflow:hidden;background-repeat:no-repeat}.ui-widget-overlay{position:absolute;top:0;left:0;width:100%;height:100%}.ui-widget{font-family:sans-serif;font-size:12px}.ui-widget .ui-widget{font-size:1em}.ui-widget input,.ui-widget select,.ui-widget textarea,.ui-widget button{font-family:sans-serif;font-size:1em}.ui-widget-content{border:1px solid #dfdfdf;background:#fff;color:#333}.ui-widget-header{border:1px solid #dfdfdf;color:#333;font-weight:bold;background-color:#f1f1f1;background-image:-ms-linear-gradient(top,#f9f9f9,#ececec);background-image:-moz-linear-gradient(top,#f9f9f9,#ececec);background-image:-o-linear-gradient(top,#f9f9f9,#ececec);background-image:-webkit-gradient(linear,left top,left bottom,from(#f9f9f9),to(#ececec));background-image:-webkit-linear-gradient(top,#f9f9f9,#ececec);background-image:linear-gradient(top,#f9f9f9,#ececec)}.ui-widget-header a{color:#333}.ui-state-default,.ui-widget-content .ui-state-default,.ui-widget-header .ui-state-default{border:1px solid #dfdfdf;background-color:#f1f1f1;background-image:-ms-linear-gradient(top,#f9f9f9,#ececec);background-image:-moz-linear-gradient(top,#f9f9f9,#ececec);background-image:-o-linear-gradient(top,#f9f9f9,#ececec);background-image:-webkit-gradient(linear,left top,left bottom,from(#f9f9f9),to(#ececec));background-image:-webkit-linear-gradient(top,#f9f9f9,#ececec);background-image:linear-gradient(top,#f9f9f9,#ececec);font-weight:normal;color:#333}.ui-state-default a,.ui-state-default a:link,.ui-state-default a:visited{color:#333;text-decoration:none}.ui-state-hover,.ui-widget-content .ui-state-hover,.ui-widget-header .ui-state-hover,.ui-state-focus,.ui-widget-content .ui-state-focus,.ui-widget-header .ui-state-focus{border:1px solid #ccc;background-color:#ececec;background-image:-ms-linear-gradient(top,#ececec,#f9f9f9);background-image:-moz-linear-gradient(top,#ececec,#f9f9f9);background-image:-o-linear-gradient(top,#ececec,#f9f9f9);background-image:-webkit-gradient(linear,left top,left bottom,from(#ececec),to(#f9f9f9));background-image:-webkit-linear-gradient(top,#ececec,#f9f9f9);background-image:linear-gradient(top,#ececec,#f9f9f9);font-weight:normal;color:#000}.ui-state-hover a,.ui-state-hover a:hover{color:#000;text-decoration:none}.ui-state-active,.ui-widget-content .ui-state-active,.ui-widget-header .ui-state-active{border:1px solid #dfdfdf;background:#fff;font-weight:normal;color:#333}.ui-state-active a,.ui-state-active a:link,.ui-state-active a:visited{color:#333;text-decoration:none}.ui-widget :active{outline:0}.ui-state-highlight,.ui-widget-content .ui-state-highlight,.ui-widget-header .ui-state-highlight{border:1px solid #e6db55;background:#ffffe0;color:#333}.ui-state-highlight a,.ui-widget-content .ui-state-highlight a,.ui-widget-header .ui-state-highlight a{color:#333}.ui-state-error,.ui-widget-content .ui-state-error,.ui-widget-header .ui-state-error{border:1px solid #c00;background:#ffebe8;color:#c00}.ui-state-error a,.ui-widget-content .ui-state-error a,.ui-widget-header .ui-state-error a{color:#c00}.ui-state-error-text,.ui-widget-content .ui-state-error-text,.ui-widget-header .ui-state-error-text{color:#c00}.ui-priority-primary,.ui-widget-content .ui-priority-primary,.ui-widget-header .ui-priority-primary{font-weight:bold}.ui-priority-secondary,.ui-widget-content .ui-priority-secondary,.ui-widget-header .ui-priority-secondary{opacity:.7;filter:Alpha(Opacity=70);font-weight:normal}.ui-state-disabled,.ui-widget-content .ui-state-disabled,.ui-widget-header .ui-state-disabled{opacity:.35;filter:Alpha(Opacity=35);background-image:none}.ui-icon{width:16px;height:16px;background-image:url(../images/ui-icons_333333_256x240.png)}.ui-widget-content .ui-icon{background-image:url(../images/ui-icons_333333_256x240.png)}.ui-widget-header .ui-icon{background-image:url(../images/ui-icons_999999_256x240.png)}.ui-state-default .ui-icon{background-image:url(../images/ui-icons_333333_256x240.png)}.ui-state-hover .ui-icon,.ui-state-focus .ui-icon{background-image:url(../images/ui-icons_333333_256x240.png)}.ui-state-active .ui-icon{background-image:url(../images/ui-icons_333333_256x240.png)}.ui-state-highlight .ui-icon{background-image:url(../images/ui-icons_21759b_256x240.png)}.ui-state-error .ui-icon,.ui-state-error-text .ui-icon{background-image:url(../images/ui-icons_cc0000_256x240.png)}.ui-icon-carat-1-n{background-position:0 0}.ui-icon-carat-1-ne{background-position:-16px 0}.ui-icon-carat-1-e{background-position:-32px 0}.ui-icon-carat-1-se{background-position:-48px 0}.ui-icon-carat-1-s{background-position:-64px 0}.ui-icon-carat-1-sw{background-position:-80px 0}.ui-icon-carat-1-w{background-position:-96px 0}.ui-icon-carat-1-nw{background-position:-112px 0}.ui-icon-carat-2-n-s{background-position:-128px 0}.ui-icon-carat-2-e-w{background-position:-144px 0}.ui-icon-triangle-1-n{background-position:0 -16px}.ui-icon-triangle-1-ne{background-position:-16px -16px}.ui-icon-triangle-1-e{background-position:-32px -16px}.ui-icon-triangle-1-se{background-position:-48px -16px}.ui-icon-triangle-1-s{background-position:-64px -16px}.ui-icon-triangle-1-sw{background-position:-80px -16px}.ui-icon-triangle-1-w{background-position:-96px -16px}.ui-icon-triangle-1-nw{background-position:-112px -16px}.ui-icon-triangle-2-n-s{background-position:-128px -16px}.ui-icon-triangle-2-e-w{background-position:-144px -16px}.ui-icon-arrow-1-n{background-position:0 -32px}.ui-icon-arrow-1-ne{background-position:-16px -32px}.ui-icon-arrow-1-e{background-position:-32px -32px}.ui-icon-arrow-1-se{background-position:-48px -32px}.ui-icon-arrow-1-s{background-position:-64px -32px}.ui-icon-arrow-1-sw{background-position:-80px -32px}.ui-icon-arrow-1-w{background-position:-96px -32px}.ui-icon-arrow-1-nw{background-position:-112px -32px}.ui-icon-arrow-2-n-s{background-position:-128px -32px}.ui-icon-arrow-2-ne-sw{background-position:-144px -32px}.ui-icon-arrow-2-e-w{background-position:-160px -32px}.ui-icon-arrow-2-se-nw{background-position:-176px -32px}.ui-icon-arrowstop-1-n{background-position:-192px -32px}.ui-icon-arrowstop-1-e{background-position:-208px -32px}.ui-icon-arrowstop-1-s{background-position:-224px -32px}.ui-icon-arrowstop-1-w{background-position:-240px -32px}.ui-icon-arrowthick-1-n{background-position:0 -48px}.ui-icon-arrowthick-1-ne{background-position:-16px -48px}.ui-icon-arrowthick-1-e{background-position:-32px -48px}.ui-icon-arrowthick-1-se{background-position:-48px -48px}.ui-icon-arrowthick-1-s{background-position:-64px -48px}.ui-icon-arrowthick-1-sw{background-position:-80px -48px}.ui-icon-arrowthick-1-w{background-position:-96px -48px}.ui-icon-arrowthick-1-nw{background-position:-112px -48px}.ui-icon-arrowthick-2-n-s{background-position:-128px -48px}.ui-icon-arrowthick-2-ne-sw{background-position:-144px -48px}.ui-icon-arrowthick-2-e-w{background-position:-160px -48px}.ui-icon-arrowthick-2-se-nw{background-position:-176px -48px}.ui-icon-arrowthickstop-1-n{background-position:-192px -48px}.ui-icon-arrowthickstop-1-e{background-position:-208px -48px}.ui-icon-arrowthickstop-1-s{background-position:-224px -48px}.ui-icon-arrowthickstop-1-w{background-position:-240px -48px}.ui-icon-arrowreturnthick-1-w{background-position:0 -64px}.ui-icon-arrowreturnthick-1-n{background-position:-16px -64px}.ui-icon-arrowreturnthick-1-e{background-position:-32px -64px}.ui-icon-arrowreturnthick-1-s{background-position:-48px -64px}.ui-icon-arrowreturn-1-w{background-position:-64px -64px}.ui-icon-arrowreturn-1-n{background-position:-80px -64px}.ui-icon-arrowreturn-1-e{background-position:-96px -64px}.ui-icon-arrowreturn-1-s{background-position:-112px -64px}.ui-icon-arrowrefresh-1-w{background-position:-128px -64px}.ui-icon-arrowrefresh-1-n{background-position:-144px -64px}.ui-icon-arrowrefresh-1-e{background-position:-160px -64px}.ui-icon-arrowrefresh-1-s{background-position:-176px -64px}.ui-icon-arrow-4{background-position:0 -80px}.ui-icon-arrow-4-diag{background-position:-16px -80px}.ui-icon-extlink{background-position:-32px -80px}.ui-icon-newwin{background-position:-48px -80px}.ui-icon-refresh{background-position:-64px -80px}.ui-icon-shuffle{background-position:-80px -80px}.ui-icon-transfer-e-w{background-position:-96px -80px}.ui-icon-transferthick-e-w{background-position:-112px -80px}.ui-icon-folder-collapsed{background-position:0 -96px}.ui-icon-folder-open{background-position:-16px -96px}.ui-icon-document{background-position:-32px -96px}.ui-icon-document-b{background-position:-48px -96px}.ui-icon-note{background-position:-64px -96px}.ui-icon-mail-closed{background-position:-80px -96px}.ui-icon-mail-open{background-position:-96px -96px}.ui-icon-suitcase{background-position:-112px -96px}.ui-icon-comment{background-position:-128px -96px}.ui-icon-person{background-position:-144px -96px}.ui-icon-print{background-position:-160px -96px}.ui-icon-trash{background-position:-176px -96px}.ui-icon-locked{background-position:-192px -96px}.ui-icon-unlocked{background-position:-208px -96px}.ui-icon-bookmark{background-position:-224px -96px}.ui-icon-tag{background-position:-240px -96px}.ui-icon-home{background-position:0 -112px}.ui-icon-flag{background-position:-16px -112px}.ui-icon-calendar{background-position:-32px -112px}.ui-icon-cart{background-position:-48px -112px}.ui-icon-pencil{background-position:-64px -112px}.ui-icon-clock{background-position:-80px -112px}.ui-icon-disk{background-position:-96px -112px}.ui-icon-calculator{background-position:-112px -112px}.ui-icon-zoomin{background-position:-128px -112px}.ui-icon-zoomout{background-position:-144px -112px}.ui-icon-search{background-position:-160px -112px}.ui-icon-wrench{background-position:-176px -112px}.ui-icon-gear{background-position:-192px -112px}.ui-icon-heart{background-position:-208px -112px}.ui-icon-star{background-position:-224px -112px}.ui-icon-link{background-position:-240px -112px}.ui-icon-cancel{background-position:0 -128px}.ui-icon-plus{background-position:-16px -128px}.ui-icon-plusthick{background-position:-32px -128px}.ui-icon-minus{background-position:-48px -128px}.ui-icon-minusthick{background-position:-64px -128px}.ui-icon-close{background-position:-80px -128px}.ui-icon-closethick{background-position:-96px -128px}.ui-icon-key{background-position:-112px -128px}.ui-icon-lightbulb{background-position:-128px -128px}.ui-icon-scissors{background-position:-144px -128px}.ui-icon-clipboard{background-position:-160px -128px}.ui-icon-copy{background-position:-176px -128px}.ui-icon-contact{background-position:-192px -128px}.ui-icon-image{background-position:-208px -128px}.ui-icon-video{background-position:-224px -128px}.ui-icon-script{background-position:-240px -128px}.ui-icon-alert{background-position:0 -144px}.ui-icon-info{background-position:-16px -144px}.ui-icon-notice{background-position:-32px -144px}.ui-icon-help{background-position:-48px -144px}.ui-icon-check{background-position:-64px -144px}.ui-icon-bullet{background-position:-80px -144px}.ui-icon-radio-off{background-position:-96px -144px}.ui-icon-radio-on{background-position:-112px -144px}.ui-icon-pin-w{background-position:-128px -144px}.ui-icon-pin-s{background-position:-144px -144px}.ui-icon-play{background-position:0 -160px}.ui-icon-pause{background-position:-16px -160px}.ui-icon-seek-next{background-position:-32px -160px}.ui-icon-seek-prev{background-position:-48px -160px}.ui-icon-seek-end{background-position:-64px -160px}.ui-icon-seek-start{background-position:-80px -160px}.ui-icon-seek-first{background-position:-80px -160px}.ui-icon-stop{background-position:-96px -160px}.ui-icon-eject{background-position:-112px -160px}.ui-icon-volume-off{background-position:-128px -160px}.ui-icon-volume-on{background-position:-144px -160px}.ui-icon-power{background-position:0 -176px}.ui-icon-signal-diag{background-position:-16px -176px}.ui-icon-signal{background-position:-32px -176px}.ui-icon-battery-0{background-position:-48px -176px}.ui-icon-battery-1{background-position:-64px -176px}.ui-icon-battery-2{background-position:-80px -176px}.ui-icon-battery-3{background-position:-96px -176px}.ui-icon-circle-plus{background-position:0 -192px}.ui-icon-circle-minus{background-position:-16px -192px}.ui-icon-circle-close{background-position:-32px -192px}.ui-icon-circle-triangle-e{background-position:-48px -192px}.ui-icon-circle-triangle-s{background-position:-64px -192px}.ui-icon-circle-triangle-w{background-position:-80px -192px}.ui-icon-circle-triangle-n{background-position:-96px -192px}.ui-icon-circle-arrow-e{background-position:-112px -192px}.ui-icon-circle-arrow-s{background-position:-128px -192px}.ui-icon-circle-arrow-w{background-position:-144px -192px}.ui-icon-circle-arrow-n{background-position:-160px -192px}.ui-icon-circle-zoomin{background-position:-176px -192px}.ui-icon-circle-zoomout{background-position:-192px -192px}.ui-icon-circle-check{background-position:-208px -192px}.ui-icon-circlesmall-plus{background-position:0 -208px}.ui-icon-circlesmall-minus{background-position:-16px -208px}.ui-icon-circlesmall-close{background-position:-32px -208px}.ui-icon-squaresmall-plus{background-position:-48px -208px}.ui-icon-squaresmall-minus{background-position:-64px -208px}.ui-icon-squaresmall-close{background-position:-80px -208px}.ui-icon-grip-dotted-vertical{background-position:0 -224px}.ui-icon-grip-dotted-horizontal{background-position:-16px -224px}.ui-icon-grip-solid-vertical{background-position:-32px -224px}.ui-icon-grip-solid-horizontal{background-position:-48px -224px}.ui-icon-gripsmall-diagonal-se{background-position:-64px -224px}.ui-icon-grip-diagonal-se{background-position:-80px -224px}.ui-corner-all,.ui-corner-top,.ui-corner-left,.ui-corner-tl{-moz-border-radius-topleft:3px;-webkit-border-top-left-radius:3px;border-top-left-radius:3px}.ui-corner-all,.ui-corner-top,.ui-corner-right,.ui-corner-tr{-moz-border-radius-topright:3px;-webkit-border-top-right-radius:3px;border-top-right-radius:3px}.ui-corner-all,.ui-corner-bottom,.ui-corner-left,.ui-corner-bl{-moz-border-radius-bottomleft:3px;-webkit-border-bottom-left-radius:3px;border-bottom-left-radius:3px}.ui-corner-all,.ui-corner-bottom,.ui-corner-right,.ui-corner-br{-moz-border-radius-bottomright:3px;-webkit-border-bottom-right-radius:3px;border-bottom-right-radius:3px}.ui-widget-overlay{background:#000;opacity:.6;filter:Alpha(Opacity=60)}.ui-widget-shadow{box-shadow:0 0 16px rgba(0,0,0,0.3)}.ui-resizable{position:relative}.ui-resizable-handle{position:absolute;font-size:.1px;z-index:99999;display:block}.ui-resizable-disabled .ui-resizable-handle,.ui-resizable-autohide .ui-resizable-handle{display:none}.ui-resizable-n{cursor:n-resize;height:7px;width:100%;top:-5px;left:0}.ui-resizable-s{cursor:s-resize;height:7px;width:100%;bottom:-5px;left:0}.ui-resizable-e{cursor:e-resize;width:7px;right:-5px;top:0;height:100%}.ui-resizable-w{cursor:w-resize;width:7px;left:-5px;top:0;height:100%}.ui-resizable-se{cursor:se-resize;width:12px;height:12px;right:1px;bottom:1px}.ui-resizable-sw{cursor:sw-resize;width:9px;height:9px;left:-5px;bottom:-5px}.ui-resizable-nw{cursor:nw-resize;width:9px;height:9px;left:-5px;top:-5px}.ui-resizable-ne{cursor:ne-resize;width:9px;height:9px;right:-5px;top:-5px}.ui-selectable-helper{position:absolute;z-index:100;border:1px dotted black}.ui-accordion{width:100%}.ui-accordion .ui-accordion-header{cursor:pointer;position:relative;margin-top:1px;zoom:1}.ui-accordion .ui-accordion-li-fix{display:inline}.ui-accordion .ui-accordion-header-active{border-bottom:0!important}.ui-accordion .ui-accordion-header a{display:block;font-size:1em;padding:.5em .5em .5em .7em}.ui-accordion-icons .ui-accordion-header a{padding-left:2.2em}.ui-accordion .ui-accordion-header .ui-icon{position:absolute;left:.5em;top:50%;margin-top:-8px}.ui-accordion .ui-accordion-content{padding:1em 2.2em;border-top:0;margin-top:-2px;position:relative;top:1px;margin-bottom:2px;overflow:auto;display:none;zoom:1}.ui-accordion .ui-accordion-content-active{display:block}.ui-autocomplete{position:absolute;cursor:default}* html .ui-autocomplete{width:1px}.ui-menu{list-style:none;padding:2px;margin:0;display:block;float:left}.ui-menu .ui-menu{margin-top:-3px}.ui-menu .ui-menu-item{margin:0;padding:0;zoom:1;float:left;clear:left;width:100%}.ui-menu .ui-menu-item a{text-decoration:none;display:block;padding:.2em .4em;line-height:1.5;zoom:1}.ui-menu .ui-menu-item a.ui-state-hover,.ui-menu .ui-menu-item a.ui-state-active{font-weight:normal;margin:-1px}.ui-button{display:inline-block;position:relative;padding:0;margin-right:.1em;text-decoration:none!important;cursor:pointer;text-align:center;zoom:1;overflow:visible}.ui-button-icon-only{width:2.2em}button.ui-button-icon-only{width:2.4em}.ui-button-icons-only{width:3.4em}button.ui-button-icons-only{width:3.7em}.ui-button .ui-button-text{display:block;line-height:1.4}.ui-button-text-only .ui-button-text{padding:.4em 1em}.ui-button-icon-only .ui-button-text,.ui-button-icons-only .ui-button-text{padding:.4em;text-indent:-9999999px}.ui-button-text-icon-primary .ui-button-text,.ui-button-text-icons .ui-button-text{padding:.4em 1em .4em 2.1em}.ui-button-text-icon-secondary .ui-button-text,.ui-button-text-icons .ui-button-text{padding:.4em 2.1em .4em 1em}.ui-button-text-icons .ui-button-text{padding-left:2.1em;padding-right:2.1em}input.ui-button{padding:.4em 1em}.ui-button-icon-only .ui-icon,.ui-button-text-icon-primary .ui-icon,.ui-button-text-icon-secondary .ui-icon,.ui-button-text-icons .ui-icon,.ui-button-icons-only .ui-icon{position:absolute;top:50%;margin-top:-8px}.ui-button-icon-only .ui-icon{left:50%;margin-left:-8px}.ui-button-text-icon-primary .ui-button-icon-primary,.ui-button-text-icons .ui-button-icon-primary,.ui-button-icons-only .ui-button-icon-primary{left:.5em}.ui-button-text-icon-secondary .ui-button-icon-secondary,.ui-button-text-icons .ui-button-icon-secondary,.ui-button-icons-only .ui-button-icon-secondary{right:.5em}.ui-button-text-icons .ui-button-icon-secondary,.ui-button-icons-only .ui-button-icon-secondary{right:.5em}.ui-buttonset{margin-right:7px}.ui-buttonset .ui-button{margin-left:0;margin-right:-.3em}button.ui-button::-moz-focus-inner{border:0;padding:0}.ui-dialog{position:fixed;padding:.2em;width:300px;overflow:hidden}.ui-dialog .ui-dialog-titlebar{padding:.4em 1em;position:relative}.ui-dialog .ui-dialog-title{float:left;margin:.1em 16px .1em 0}.ui-dialog .ui-dialog-titlebar-close{position:absolute;right:.3em;top:50%;width:19px;margin:-10px 0 0 0;padding:1px;height:18px}.ui-dialog .ui-dialog-titlebar-close span{display:block;margin:1px}.ui-dialog .ui-dialog-titlebar-close:hover,.ui-dialog .ui-dialog-titlebar-close:focus{padding:0}.ui-dialog .ui-dialog-content{position:relative;border:0;padding:.5em 1em;background:0;overflow:auto;zoom:1}.ui-dialog .ui-dialog-buttonpane{text-align:left;border-width:1px 0 0 0;background-image:none;margin:.5em 0 0 0;padding:.3em 1em .5em .4em}.ui-dialog .ui-dialog-buttonpane .ui-dialog-buttonset{float:right}.ui-dialog .ui-dialog-buttonpane button{margin:.5em .4em .5em 0;cursor:pointer}.ui-dialog .ui-resizable-se{width:14px;height:14px;right:3px;bottom:3px}.ui-draggable .ui-dialog-titlebar{cursor:move}.ui-slider{position:relative;text-align:left}.ui-slider .ui-slider-handle{position:absolute;z-index:2;width:1.2em;height:1.2em;cursor:default}.ui-slider .ui-slider-range{position:absolute;z-index:1;font-size:.7em;display:block;border:0;background-position:0 0}.ui-slider-horizontal{height:.8em}.ui-slider-horizontal .ui-slider-handle{top:-.3em;margin-left:-.6em}.ui-slider-horizontal .ui-slider-range{top:0;height:100%}.ui-slider-horizontal .ui-slider-range-min{left:0}.ui-slider-horizontal .ui-slider-range-max{right:0}.ui-slider-vertical{width:.8em;height:100px}.ui-slider-vertical .ui-slider-handle{left:-.3em;margin-left:0;margin-bottom:-.6em}.ui-slider-vertical .ui-slider-range{left:0;width:100%}.ui-slider-vertical .ui-slider-range-min{bottom:0}.ui-slider-vertical .ui-slider-range-max{top:0}.ui-tabs{position:relative;padding:.2em;zoom:1}.ui-tabs .ui-tabs-nav{margin:0;padding:.2em .2em 0}.ui-tabs .ui-tabs-nav li{list-style:none;float:left;position:relative;top:1px;margin:0 .2em 1px 0;border-bottom:0!important;padding:0;white-space:nowrap}.ui-tabs .ui-tabs-nav li a{float:left;padding:.5em 1em;text-decoration:none}.ui-tabs .ui-tabs-nav li.ui-tabs-selected{margin-bottom:0;padding-bottom:1px}.ui-tabs .ui-tabs-nav li.ui-tabs-selected a,.ui-tabs .ui-tabs-nav li.ui-state-disabled a,.ui-tabs .ui-tabs-nav li.ui-state-processing a{cursor:text}.ui-tabs .ui-tabs-nav li a,.ui-tabs.ui-tabs-collapsible .ui-tabs-nav li.ui-tabs-selected a{cursor:pointer}.ui-tabs .ui-tabs-panel{display:block;border-width:0;padding:1em 1.4em;background:0}.ui-tabs .ui-tabs-hide{display:none!important}.ui-datepicker{width:17em;padding:.2em .2em 0;display:none}.ui-datepicker .ui-datepicker-header{position:relative;padding:.2em 0}.ui-datepicker .ui-datepicker-prev,.ui-datepicker .ui-datepicker-next{position:absolute;top:2px;width:1.8em;height:1.8em}.ui-datepicker .ui-datepicker-prev-hover,.ui-datepicker .ui-datepicker-next-hover{top:1px}.ui-datepicker .ui-datepicker-prev{left:2px}.ui-datepicker .ui-datepicker-next{right:2px}.ui-datepicker .ui-datepicker-prev-hover{left:1px}.ui-datepicker .ui-datepicker-next-hover{right:1px}.ui-datepicker .ui-datepicker-prev span,.ui-datepicker .ui-datepicker-next span{display:block;position:absolute;left:50%;margin-left:-8px;top:50%;margin-top:-8px}.ui-datepicker .ui-datepicker-title{margin:0 2.3em;line-height:1.8em;text-align:center}.ui-datepicker .ui-datepicker-title select{font-size:1em;margin:1px 0}.ui-datepicker select.ui-datepicker-month-year{width:100%}.ui-datepicker select.ui-datepicker-month,.ui-datepicker select.ui-datepicker-year{width:49%}.ui-datepicker table{width:100%;font-size:.9em;border-collapse:collapse;margin:0 0 .4em}.ui-datepicker th{padding:.7em .3em;text-align:center;font-weight:bold;border:0}.ui-datepicker td{border:0;padding:1px}.ui-datepicker td span,.ui-datepicker td a{display:block;padding:.2em;text-align:right;text-decoration:none}.ui-datepicker .ui-datepicker-buttonpane{background-image:none;margin:.7em 0 0 0;padding:0 .2em;border-left:0;border-right:0;border-bottom:0}.ui-datepicker .ui-datepicker-buttonpane button{float:right;margin:.5em .2em .4em;cursor:pointer;padding:.2em .6em .3em .6em;width:auto;overflow:visible}.ui-datepicker .ui-datepicker-buttonpane button.ui-datepicker-current{float:left}.ui-datepicker.ui-datepicker-multi{width:auto}.ui-datepicker-multi .ui-datepicker-group{float:left}.ui-datepicker-multi .ui-datepicker-group table{width:95%;margin:0 auto .4em}.ui-datepicker-multi-2 .ui-datepicker-group{width:50%}.ui-datepicker-multi-3 .ui-datepicker-group{width:33.3%}.ui-datepicker-multi-4 .ui-datepicker-group{width:25%}.ui-datepicker-multi .ui-datepicker-group-last .ui-datepicker-header{border-left-width:0}.ui-datepicker-multi .ui-datepicker-group-middle .ui-datepicker-header{border-left-width:0}.ui-datepicker-multi .ui-datepicker-buttonpane{clear:left}.ui-datepicker-row-break{clear:both;width:100%;font-size:0}.ui-datepicker-rtl{direction:rtl}.ui-datepicker-rtl .ui-datepicker-prev{right:2px;left:auto}.ui-datepicker-rtl .ui-datepicker-next{left:2px;right:auto}.ui-datepicker-rtl .ui-datepicker-prev:hover{right:1px;left:auto}.ui-datepicker-rtl .ui-datepicker-next:hover{left:1px;right:auto}.ui-datepicker-rtl .ui-datepicker-buttonpane{clear:right}.ui-datepicker-rtl .ui-datepicker-buttonpane button{float:left}.ui-datepicker-rtl .ui-datepicker-buttonpane button.ui-datepicker-current{float:right}.ui-datepicker-rtl .ui-datepicker-group{float:right}.ui-datepicker-rtl .ui-datepicker-group-last .ui-datepicker-header{border-right-width:0;border-left-width:1px}.ui-datepicker-rtl .ui-datepicker-group-middle .ui-datepicker-header{border-right-width:0;border-left-width:1px}.ui-datepicker-cover{display:none;display:block;position:absolute;z-index:-1;filter:mask();top:-4px;left:-4px;width:200px;height:200px}.ui-progressbar{height:2em;text-align:left}.ui-progressbar .ui-progressbar-value{margin:-1px;height:100%}.ui-progressbar .ui-widget-header{background-color:#83b4d8;background-image:linear-gradient(bottom,#72a7cf 0,#90c5ee 100%);background-image:-o-linear-gradient(bottom,#72a7cf 0,#90c5ee 100%);background-image:-moz-linear-gradient(bottom,#72a7cf 0,#90c5ee 100%);background-image:-webkit-linear-gradient(bottom,#72a7cf 0,#90c5ee 100%);background-image:-ms-linear-gradient(bottom,#72a7cf 0,#90c5ee 100%)}
diff --git a/classes/wpdesk/settings-api/assets/js/admin.js b/classes/wpdesk/settings-api/assets/js/admin.js
deleted file mode 100644
index 21c0bdd23184238e0ccd372d0b4adb969ac9b6e3..0000000000000000000000000000000000000000
--- a/classes/wpdesk/settings-api/assets/js/admin.js
+++ /dev/null
@@ -1,104 +0,0 @@
-/*global jQuery, document, window, wp, CodeMirror, s214_settings_vars*/
-jQuery(document).ready(function ($) {
-    'use strict';
-
-    // Setup color picker
-    if ($('.s214-color-picker').length) {
-        $('.s214-color-picker').wpColorPicker();
-    }
-
-    // Setup select2
-    if ($('.s214-select2').length) {
-        $('.s214-select2').select2();
-    }
-
-    // Setup CodeMirror
-    if ($('.s214-html').length) {
-        $('.s214-html').each(function (index, elem) {
-            CodeMirror.fromTextArea(elem, {
-                lineNumbers: true,
-                mode: 'text/html',
-                showCursorWhenSelecting: true
-            });
-        });
-    }
-
-    // Setup tooltips
-    $('.s214-help-tip').tooltip({
-        content: function () {
-            return $(this).prop('title');
-        },
-        position: {
-            my: 'center top',
-            at: 'center bottom+10',
-            collision: 'flipfit'
-        },
-        hide: {
-            duration: 200
-        },
-        show: {
-            duration: 200
-        }
-    });
-
-    // Setup uploaders
-    if ($('.' + s214_settings_vars.func + '_settings_upload_button').length) {
-        var file_frame;
-
-        $('body').on('click', '.' + s214_settings_vars.func + '_settings_upload_button', function (e) {
-            e.preventDefault();
-
-            var button = $(this);
-
-            window.formfield = $(this).parent().prev();
-
-            // If the media frame already exists, reopen it
-            if (file_frame) {
-                file_frame.open();
-                return;
-            }
-
-            // Create the media frame
-            wp.media.frames.file_frame = wp.media({
-                frame: 'post',
-                state: 'insert',
-                title: button.data('uploader_title'),
-                button: {
-                    text: button.data('uploader_button_text')
-                },
-                multiple: false
-            });
-
-            file_frame = wp.media.frames.file_frame;
-
-            file_frame.on('menu:render:default', function (view) {
-                // Store our views in an object
-                var views = {};
-
-                // Unset default menu items
-                view.unset('library-separator');
-                view.unset('gallery');
-                view.unset('featured-image');
-                view.unset('embed');
-
-                // Initialize the views in our object
-                view.set(views);
-            });
-
-            // Run a callback on select
-            file_frame.on('insert', function () {
-                var selection = file_frame.state().get('selection');
-
-                selection.each(function (attachment) {
-                    attachment = attachment.toJSON();
-                    window.formfield.val(attachment.url);
-                });
-            });
-
-            // Open the modal
-            file_frame.open();
-        });
-
-        window.formfield = '';
-    }
-});
diff --git a/classes/wpdesk/settings-api/assets/js/admin.min.js b/classes/wpdesk/settings-api/assets/js/admin.min.js
deleted file mode 100644
index 5a34d98c1125f11ff879375c29be3401deb49585..0000000000000000000000000000000000000000
--- a/classes/wpdesk/settings-api/assets/js/admin.min.js
+++ /dev/null
@@ -1 +0,0 @@
-jQuery(document).ready(function(t){"use strict";if(t(".s214-color-picker").length&&t(".s214-color-picker").wpColorPicker(),t(".s214-select2").length&&t(".s214-select2").select2(),t(".s214-html").length&&t(".s214-html").each(function(t,e){CodeMirror.fromTextArea(e,{lineNumbers:!0,mode:"text/html",showCursorWhenSelecting:!0})}),t(".s214-help-tip").tooltip({content:function(){return t(this).prop("title")},position:{my:"center top",at:"center bottom+10",collision:"flipfit"},hide:{duration:200},show:{duration:200}}),t("."+s214_settings_vars.func+"_settings_upload_button").length){var e;t("body").on("click","."+s214_settings_vars.func+"_settings_upload_button",function(n){n.preventDefault();var o=t(this);return window.formfield=t(this).parent().prev(),e?void e.open():(wp.media.frames.file_frame=wp.media({frame:"post",state:"insert",title:o.data("uploader_title"),button:{text:o.data("uploader_button_text")},multiple:!1}),e=wp.media.frames.file_frame,e.on("menu:render:default",function(t){var e={};t.unset("library-separator"),t.unset("gallery"),t.unset("featured-image"),t.unset("embed"),t.set(e)}),e.on("insert",function(){var t=e.state().get("selection");t.each(function(t){t=t.toJSON(),window.formfield.val(t.url)})}),void e.open())}),window.formfield=""}});
diff --git a/classes/wpdesk/settings-api/class.s214-settings.php b/classes/wpdesk/settings-api/class.s214-settings.php
deleted file mode 100644
index 989d45c5dc805f0716c04fb6bdac5a628571ab65..0000000000000000000000000000000000000000
--- a/classes/wpdesk/settings-api/class.s214-settings.php
+++ /dev/null
@@ -1,1253 +0,0 @@
-<?php
-/**
- * Section214 Settings Class
- *
- * @package     S214\Settings
- * @since       1.0.0
- */
-
-
-// Exit if accessed directly
-if( ! defined( 'ABSPATH' ) ) {
-    exit;
-}
-
-
-/**
- * Section214 settings handler class
- *
- * @since       1.0.0
- */
-class WPDesk_S214_Settings_1_10 {
-
-
-	/**
-	 * @var         string $version The settings class version
-	 * @since       1.0.0
-	 */
-	private $version = '1.2.2';
-
-
-	/**
-	 * @var         string $slug The plugin slug
-	 * @since       1.0.0
-	 */
-	private $slug;
-
-
-	/**
-	 * @var         string $func The plugin slug for names
-	 * @since       1.0.0
-	 */
-	private $func;
-
-
-	/**
-	 * @var         string $default_tab The default tab to display
-	 * @since       1.0.0
-	 */
-	private $default_tab;
-
-
-	/**
-	 * @var         bool $show_title Whether or not to display the page title
-	 * @since       1.0.3
-	 */
-	private $show_title;
-
-
-    /**
-	 * @var         bool page_title The page title
-	 * @since       1.2.1
-	 */
-	private $page_title;
-
-
-	/**
-	 * @var         object $sysinfo The sysinfo object
-	 * @since       1.1.0
-	 */
-	private $sysinfo;
-
-
-	/**
-	 * Get things started
-	 *
-	 * @access      public
-	 * @since       1.0.1
-	 * @param       string $slug The plugin slug
-	 * @param       string $default_tab The default settings tab to display
-	 * @return      void
-	 */
-	public function __construct( $slug = false, $default_tab = 'general' ) {
-		// Bail if no slug is specified
-		if( ! $slug ) {
-			return;
-		}
-
-		// Setup plugin variables
-		$this->slug        = $slug;
-		$this->func        = str_replace( '-', '_', $slug );
-		$this->default_tab = $default_tab;
-
-		// Run action and filter hooks
-		$this->hooks();
-
-		// Setup the Sysinfo class
-		if( ! class_exists( 'S214_Sysinfo' ) ) {
-			require_once 'modules/sysinfo/class.s214-sysinfo.php';
-		}
-		$this->sysinfo = new S214_Sysinfo( $this->slug, $this->func, $this->version );
-	}
-
-
-	/**
-	 * Run action and filter hooks
-	 *
-	 * @access      private
-	 * @since       1.0.0
-	 * @return      void
-	 */
-	private function hooks() {
-		// Add the plugin setting page
-		add_action( 'admin_menu', array( $this, 'add_settings_page' ), 10 );
-
-		// Register the plugin settings
-		add_action( 'admin_init', array( $this, 'register_settings' ) );
-		add_filter( $this->func . '_settings_sanitize_text', array( $this, 'sanitize_text_field' ) );
-
-		// Add styles and scripts
-		add_action( 'admin_enqueue_scripts', array( $this, 'enqueue_scripts' ), 100 );
-
-		// Process actions
-		add_action( 'admin_init', array( $this, 'process_actions' ) );
-
-		// Handle tooltips
-		add_filter( $this->func . '_after_setting_output', array( $this, 'add_setting_tooltip' ), 10, 2 );
-	}
-
-
-	/**
-	 * Add settings pages
-	 *
-	 * @access      public
-	 * @since       1.0.0
-	 * @global      string ${this->func . '_settings_page'} The settings page slug
-	 * @return      void
-	 */
-	public function add_settings_page() {
-		global ${$this->func . '_settings_page'};
-
-		$menu = apply_filters( $this->func . '_menu', array(
-			'type'       => 'menu',
-			'parent'     => 'options-general.php',
-			'page_title' => __( 'Section214 Settings', 'wpdesk-plugin' ),
-			'show_title' => false,
-			'menu_title' => __( 'Section214 Settings', 'wpdesk-plugin' ),
-			'capability' => 'manage_options',
-			'icon'       => '',
-			'position'   => null
-		) );
-
-		$this->show_title = $menu['show_title'];
-        $this->page_title = $menu['page_title'];
-
-		if( $menu['type'] == 'submenu' ) {
-			${$this->func . '_settings_page'} = add_submenu_page( $menu['parent'], $menu['page_title'], $menu['menu_title'], $menu['capability'], $this->slug . '-settings', array( $this, 'render_settings_page' ) );
-		} else {
-			${$this->func . '_settings_page'} = add_menu_page( $menu['page_title'], $menu['menu_title'], $menu['capability'], $this->slug . '-settings', array( $this, 'render_settings_page' ), $menu['icon'], $menu['position'] );
-		}
-	}
-
-
-	/**
-	 * Render settings page
-	 *
-	 * @access      public
-	 * @since       1.0.0
-	 * @return      void
-	 */
-	public function render_settings_page() {
-		$active_tab = isset( $_GET['tab'] ) && array_key_exists( $_GET['tab'], $this->get_settings_tabs() ) ? $_GET['tab'] : $this->default_tab;
-		$sections   = $registered_sections = $this->get_settings_tab_sections( $active_tab );
-		$key        = 'main';
-
-		if( is_array( $sections ) ) {
-			$key = key( $sections );
-		}
-
-		$section = isset( $_GET['section'] ) && ! empty( $registered_sections ) && array_key_exists( $_GET['section'], $registered_sections ) ? $_GET['section'] : $key;
-
-		ob_start();
-		?>
-		<div class="wrap">
-			<?php if( $this->show_title ) { ?>
-				<h2><?php echo $this->page_title; ?></h2>
-			<?php } ?>
-			<h2 class="nav-tab-wrapper">
-				<?php
-				foreach( $this->get_settings_tabs() as $tab_id => $tab_name ) {
-					$tab_url = add_query_arg( array(
-						'settings-updated' => false,
-						'tab'              => $tab_id
-					) );
-
-					// Remove the section from the tabs so we always end up at the main section
-					$tab_url = remove_query_arg( 'section', $tab_url );
-
-					$tab_url = apply_filters( $this->func . '_settings_tab_url_' . $tab_id, $tab_url );
-					$tab_url = apply_filters( $this->func . '_settings_tab_url', $tab_url );
-
-					$active = $active_tab == $tab_id ? ' nav-tab-active' : '';
-
-					echo '<a href="' . esc_url( $tab_url ) . '" title="' . esc_attr( $tab_name )  . '" class="nav-tab' . $active . '">' . esc_html( $tab_name ) . '</a>';
-				}
-				?>
-			</h2>
-			<?php
-
-			$number_of_sections = count( $sections );
-			$number = 0;
-
-			if( $number_of_sections > 1 ) {
-				echo '<div><ul class="subsubsub">';
-
-				foreach( $sections as $section_id => $section_name ) {
-					echo '<li>';
-
-					$number++;
-					$tab_url = add_query_arg( array(
-						'settings-updated' => false,
-						'tab'              => $active_tab,
-						'section'          => $section_id
-					) );
-					$class = '';
-
-					if( $section == $section_id ) {
-						$class = 'current';
-					}
-
-					$tab_url = apply_filters( $this->func . '_settings_section_url_' . $section_id, $tab_url );
-					$tab_url = apply_filters( $this->func . '_settings_section_url', $tab_url );
-
-					echo '<a class="' . $class . '" href="' . esc_url( $tab_url ) . '">' . $section_name . '</a>';
-
-					if( $number != $number_of_sections ) {
-						echo ' | ';
-					}
-
-					echo '</li>';
-				}
-
-				echo '</ul></div>';
-			}
-			?>
-			<div id="tab_container">
-				<form method="post" action="options.php">
-					<table class="form-table">
-						<?php
-						settings_fields( $this->func . '_settings' );
-
-						do_action( $this->func . '_settings_tab_top_' . $active_tab, $section );
-
-						do_action( $this->func . '_settings_tab_top_' . $active_tab . '_' . $section );
-
-						do_settings_sections( $this->func . '_settings_' . $active_tab . '_' . $section );
-
-						do_action( $this->func . '_settings_tab_bottom_' . $active_tab, $section );
-
-						do_action( $this->func . '_settings_tab_bottom_' . $active_tab . '_' . $section );
-						?>
-					</table>
-					<?php
-					if( ! in_array( $active_tab, apply_filters( $this->func . '_unsavable_tabs', array() ) ) ) {
-						submit_button();
-					}
-					?>
-				</form>
-			</div>
-		</div>
-		<?php
-		echo ob_get_clean();
-	}
-
-
-	/**
-	 * Retrieve the settings tabs
-	 *
-	 * @access      private
-	 * @since       1.0.0
-	 * @return      array $tabs The registered tabs for this plugin
-	 */
-	private function get_settings_tabs() {
-		return apply_filters( $this->func . '_settings_tabs', array() );
-	}
-
-
-	/**
-	 * Retrieve settings tab sections
-	 *
-	 * @access      public
-	 * @since       1.0.1
-	 * @param       string $tab The current tab
-	 * @return      array $section The section items
-	 */
-	public function get_settings_tab_sections( $tab = false ) {
-		$tabs     = false;
-		$sections = $this->get_registered_settings_sections();
-
-		if( $tab && ! empty( $sections[$tab] ) ) {
-			$tabs = $sections[$tab];
-		} elseif( $tab ) {
-			$tabs = false;
-		}
-
-		return $tabs;
-	}
-
-
-	/**
-	 * Retrieve the plugin settings
-	 *
-	 * @access      public
-	 * @since       1.0.0
-	 * @return      array $settings The plugin settings
-	 */
-	public function get_registered_settings() {
-		return apply_filters( $this->func . '_registered_settings', array() );
-	}
-
-
-	/**
-	 * Retrieve the plugin settings sections
-	 *
-	 * @access      private
-	 * @since       1.0.1
-	 * @return      array $sections The registered sections
-	 */
-	private function get_registered_settings_sections() {
-		global ${$this->func . '_sections'};
-
-		if ( !empty( ${$this->func . '_sections'} ) ) {
-			return ${$this->func . '_sections'};
-		}
-
-		${$this->func . '_sections'} = apply_filters( $this->func . '_registered_settings_sections', array() );
-
-		return ${$this->func . '_sections'};
-	}
-
-
-	/**
-	 * Retrieve an option
-	 *
-	 * @access      public
-	 * @since       1.0.0
-	 * @param       string $key The key to retrieve
-	 * @param       mixed $default The default value if key doesn't exist
-	 * @global      array ${$this->func . '_options'} The options array
-	 * @return      mixed $value The value to return
-	 */
-	public function get_option( $key = '', $default = false ) {
-		global ${$this->func . '_options'};
-
-		$value = ! empty( ${$this->func . '_options'}[$key] ) ? ${$this->func . '_options'}[$key] : $default;
-		$value = apply_filters( $this->func . '_get_option', $value, $key, $default );
-
-		return apply_filters( $this->func . '_get_option_' . $key, $value, $key, $default );
-	}
-
-
-	/**
-	 * Update an option
-	 *
-	 * @access      public
-	 * @since       1.0.0
-	 * @param       string $key The key to update
-	 * @param       mixed $value The value to set key to
-	 * @return      bool true if updated, false otherwise
-	 */
-	public function update_option( $key = '', $value = false ) {
-		// Bail if no key is set
-		if( empty( $key ) ) {
-			return false;
-		}
-
-		if( empty( $value ) ) {
-			$remove_option = $this->delete_option( $key );
-			return $remove_option;
-		}
-
-		// Fetch a clean copy of the options array
-		$options = get_option( $this->func . '_settings' );
-
-		// Allow devs to modify the value
-		$value = apply_filters( $this->func . '_update_option', $value, $key );
-
-		// Try to update the option
-		$options[$key] = $value;
-		$did_update    = update_option( $this->func . '_settings', $options );
-
-		// Update the global
-		if( $did_update ) {
-			global ${$this->func . '_options'};
-			${$this->func . '_options'}[$key] = $value;
-		}
-
-		return $did_update;
-	}
-
-
-	/**
-	 * Delete an option
-	 *
-	 * @access      public
-	 * @since       1.0.0
-	 * @param       string $key The key to delete
-	 * @return      bool true if deleted, false otherwise
-	 */
-	public function delete_option( $key = '' ) {
-		// Bail if no key is set
-		if( empty( $key ) ) {
-			return false;
-		}
-
-		// Fetch a clean copy of the options array
-		$options = get_option( $this->func . '_settings' );
-
-		// Try to unset the option
-		if( isset( $options[$key] ) ) {
-			unset( $options[$key] );
-		}
-
-		$did_update = update_option( $this->func . '_settings', $options );
-
-		// Update the global
-		if( $did_update ) {
-			global ${$this->func . '_options'};
-			${$this->func . '_options'} = $options;
-		}
-
-		return $did_update;
-	}
-
-
-	/**
-	 * Retrieve all options
-	 *
-	 * @access      public
-	 * @since       1.0.0
-	 * @return      array $settings The options array
-	 */
-	public function get_settings() {
-		$settings = get_option( $this->func . '_settings' );
-
-		if( empty( $settings ) ) {
-			$settings = array();
-
-			update_option( $this->func . '_settings', $settings );
-		}
-
-		return apply_filters( $this->func . '_get_settings', $settings );
-	}
-
-
-	/**
-	 * Add settings sections and fields
-	 *
-	 * @access      public
-	 * @since       1.0.0
-	 * @return      void
-	 */
-	function register_settings() {
-		if( get_option( $this->func . '_settings' ) == false ) {
-			add_option( $this->func . '_settings' );
-		}
-
-		foreach( $this->get_registered_settings() as $tab => $sections ) {
-			foreach( $sections as $section => $settings ) {
-				// Check for backwards compatibility
-				$section_tabs = $this->get_settings_tab_sections( $tab );
-
-				if( ! is_array( $section_tabs ) || ! array_key_exists( $section, $section_tabs ) ) {
-					$section  = 'main';
-					$settings = $sections;
-				}
-
-				add_settings_section(
-					$this->func . '_settings_' . $tab . '_' . $section,
-					__return_null(),
-					'__return_false',
-					$this->func . '_settings_' . $tab . '_' . $section
-				);
-
-				foreach( $settings as $option ) {
-					// For backwards compatibility
-					if( empty( $option['id'] ) ) {
-						continue;
-					}
-
-					$name = isset( $option['name'] ) ? $option['name'] : '';
-
-					add_settings_field(
-						$this->func . '_settings[' . $option['id'] . ']',
-						$name,
-						function_exists(
-						    $this->func . '_' . $option['type'] . '_callback' )
-                                ? $this->func . '_' . $option['type'] . '_callback'
-                                : ( method_exists( $this, $option['type'] . '_callback' )
-                                    ? array( $this, $option['type'] . '_callback' )
-                                    : array( $this, 'missing_callback' )
-                        ),
-						$this->func . '_settings_' . $tab . '_' . $section,
-						$this->func . '_settings_' . $tab . '_' . $section,
-						array(
-							'section'       => $section,
-							'id'            => isset( $option['id'] )            ? $option['id']             : null,
-							'desc'          => ! empty( $option['desc'] )        ? $option['desc']           : '',
-							'name'          => isset( $option['name'] )          ? $option['name']           : null,
-							'size'          => isset( $option['size'] )          ? $option['size']           : null,
-							'options'       => isset( $option['options'] )       ? $option['options']        : '',
-							'std'           => isset( $option['std'] )           ? $option['std']            : '',
-							'min'           => isset( $option['min'] )           ? $option['min']            : null,
-							'max'           => isset( $option['max'] )           ? $option['max']            : null,
-							'step'          => isset( $option['step'] )          ? $option['step']           : null,
-							'select2'       => isset( $option['select2'] )       ? $option['select2']        : null,
-							'placeholder'   => isset( $option['placeholder'] )   ? $option['placeholder']    : null,
-							'multiple'      => isset( $option['multiple'] )      ? $option['multiple']       : null,
-							'allow_blank'   => isset( $option['allow_blank'] )   ? $option['allow_blank']    : true,
-							'readonly'      => isset( $option['readonly'] )      ? $option['readonly']       : false,
-							'buttons'       => isset( $option['buttons'] )       ? $option['buttons']        : null,
-							'wpautop'       => isset( $option['wpautop'] )       ? $option['wpautop']        : null,
-							'teeny'         => isset( $option['teeny'] )         ? $option['teeny']          : null,
-							'tab'           => isset( $option['tab'] )           ? $option['tab']            : null,
-							'tooltip_title' => isset( $option['tooltip_title'] ) ? $option['tooltip_title']  : false,
-							'tooltip_desc'  => isset( $option['tooltip_desc'] )  ? $option['tooltip_desc']   : false,
-							'class'         => isset( $option['class'] )         ? $option['class']          : '',
-						)
-					);
-				}
-			}
-		}
-
-		register_setting( $this->func . '_settings', $this->func . '_settings', array( $this, 'settings_sanitize' ) );
-	}
-
-
-	/**
-	 * Settings sanitization
-	 *
-	 * @access      public
-	 * @since       1.0.0
-	 * @param       array $input The value entered in the field
-	 * @global      array ${$this->func . '_options'} The options array
-	 * @return      string $input The sanitized value
-	 */
-	public function settings_sanitize( $input = array() ) {
-		global ${$this->func . '_options'};
-
-		$doing_section = false;
-
-		if( ! empty( $_POST['_wp_http_referer'] ) ) {
-			$doing_section = true;
-		}
-
-		$setting_types = $this->get_registered_settings_types();
-		$input         = $input ? $input : array();
-
-		if( $doing_section ) {
-			parse_str( $_POST['_wp_http_referer'], $referrer );
-
-			$tab     = isset( $referrer['tab'] ) ? $referrer['tab'] : $this->default_tab;
-			$section = isset( $referrer['section'] ) ? $referrer['section'] : 'main';
-			$input   = apply_filters( $this->func . '_settings_' . $tab . '_sanitize', $input );
-			$input   = apply_filters( $this->func . '_settings_' . $tab . '-' . $section . '_sanitize', $input );
-		}
-
-		$output = array_merge( ${$this->func . '_options'}, $input );
-
-		foreach( $setting_types as $key => $type ) {
-			if( empty( $type ) ) {
-				continue;
-			}
-
-			// Bypass non-setting settings
-			$non_setting_types = apply_filters( $this->func . '_non_setting_types', array(
-				'header', 'descriptive_text', 'hook'
-			) );
-
-			if( in_array( $type, $non_setting_types ) ) {
-				continue;
-			}
-
-			if( array_key_exists( $key, $output ) ) {
-				$output[$key] = apply_filters( $this->func . '_settings_sanitize_' . $type, $output[$key], $key );
-				$output[$key] = apply_filters( $this->func . '_settings_sanitize', $output[$key], $key );
-			}
-
-			if( $doing_section ) {
-				switch( $type ) {
-					case 'checkbox':
-						if( array_key_exists( $key, $input ) && $output[$key] === '-1' ) {
-							unset( $output[$key] );
-						}
-						break;
-					default:
-						if( array_key_exists( $key, $input ) && empty( $input[$key] ) ) {
-							unset( $output[$key] );
-						}
-						break;
-				}
-			} else {
-				if( empty( $input[$key] ) ) {
-					unset( $output[$key] );
-				}
-			}
-		}
-
-		if( $doing_section ) {
-			add_settings_error( $this->slug . '-notices', '', __( 'Settings updated.', 'wpdesk-plugin' ), 'updated' );
-		}
-
-		return $output;
-	}
-
-
-	/**
-	 * Flattens the set of registered settings and their type so we can easily sanitize all settings
-	 *
-	 * @since       1.2.0
-	 * @return      array Key is the setting ID, value is the type of setting it is registered as
-	 */
-	function get_registered_settings_types() {
-		$settings      = $this->get_registered_settings();
-		$setting_types = array();
-
-		foreach( $settings as $tab ) {
-			foreach( $tab as $section_or_setting ) {
-				// See if we have a setting registered at the tab level for backwards compatibility
-				if( is_array( $section_or_setting ) && array_key_exists( 'type', $section_or_setting ) ) {
-					$setting_types[$section_or_setting['id']] = $section_or_setting['type'];
-					continue;
-				}
-
-				foreach( $section_or_setting as $section => $section_settings ) {
-					$setting_types[$section_settings['id']] = $section_settings['type'];
-				}
-			}
-		}
-
-		return $setting_types;
-	}
-
-
-	/**
-	 * Sanitize text fields
-	 *
-	 * @access      public
-	 * @since       1.0.0
-	 * @param       array $input The value entered in the field
-	 * @return      string $input The sanitized value
-	 */
-	public function sanitize_text_field( $input ) {
-		return trim( wp_strip_all_tags( $input, true ) );
-	}
-
-
-	/**
-	 * Header callback
-	 *
-	 * @access      public
-	 * @since       1.0.0
-	 * @param       array $args Arguments passed by the setting
-	 * @return      void
-	 */
-	public function header_callback( $args ) {
-		echo '<hr />';
-	}
-
-
-	/**
-	 * Checkbox callback
-	 *
-	 * @access      public
-	 * @since       1.0.0
-	 * @param       array $args Arguments passed by the setting
-	 * @global      array ${$this->func . '_options'} The plugin options
-	 * @return      void
-	 */
-	public function checkbox_callback( $args ) {
-		global ${$this->func . '_options'};
-
-		$name    = ' name="' . $this->func . '_settings[' . $args['id'] . ']"';
-		$checked = isset( ${$this->func . '_options'}[$args['id']] ) ? checked( 1, ${$this->func . '_options'}[$args['id']], false ) : '';
-
-		$html  = '<input type="hidden"' . $name . ' value="-1" />';
-		$html .= '<input type="checkbox" id="' . $this->func . '_settings[' . $args['id'] . ']"' . $name . ' value="1" ' . $checked . '/>&nbsp;';
-		$html .= '<span class="description"><label for="' . $this->func . '_settings[' . $args['id'] . ']">' . $args['desc'] . '</label></span>';
-
-		echo apply_filters( $this->func . '_after_setting_output', $html, $args );
-	}
-
-
-	/**
-	 * Color callback
-	 *
-	 * @access      public
-	 * @since       1.0.0
-	 * @param       array $args Arguments passed by the settings
-	 * @global      array ${$this->func . '_options'} The Beacon options
-	 * @return      void
-	 */
-	public function color_callback( $args ) {
-		global ${$this->func . '_options'};
-
-		if( isset( ${$this->func . '_options'}[$args['id']] ) ) {
-			$value = ${$this->func . '_options'}[$args['id']];
-		} else {
-			$value = isset( $args['std'] ) ? $args['std'] : '';
-		}
-
-		$default = isset( $args['std'] ) ? $args['std'] : '';
-		$size    = ( isset( $args['size'] ) && ! is_null( $args['size'] ) ) ? $args['size'] : 'regular';
-
-		$html  = '<input type="text" class="s214-color-picker" id="' . $this->func . '_settings[' . $args['id'] . ']" name="' . $this->func . '_settings[' . $args['id'] . ']" value="' . esc_attr( $value ) . '" data-default-color="' . esc_attr( $default ) . '" />&nbsp;';
-		$html .= '<span class="s214-color-picker-label description"><label for="' . $this->func . '_settings[' . $args['id'] . ']">' . $args['desc'] . '</label></span>';
-
-		echo apply_filters( $this->func . '_after_setting_output', $html, $args );
-	}
-
-
-	/**
-	 * Descriptive text callback
-	 *
-	 * @access      public
-	 * @since       1.0.0
-	 * @param       array $args Arguments passed by the setting
-	 * @return      void
-	 */
-	public function descriptive_text_callback( $args ) {
-		$html = wp_kses_post( $args['desc'] );
-
-		echo apply_filters( $this->func . '_after_setting_output', $html, $args );
-	}
-
-
-	/**
-	 * Editor callback
-	 *
-	 * @access      public
-	 * @since       1.0.0
-	 * @param       array $args Arguments passed by the setting
-	 * @global      array ${$this->func . '_options'} The Beacon options
-	 * @return      void
-	 */
-	public function editor_callback( $args ) {
-		global ${$this->func . '_options'};
-
-		if( isset( ${$this->func . '_options'}[$args['id']] ) ) {
-			$value = ${$this->func . '_options'}[$args['id']];
-
-			if( empty( $args['allow_blank'] ) && empty( $value ) ) {
-				$value = isset( $args['std'] ) ? $args['std'] : '';
-			}
-		} else {
-			$value = isset( $args['std'] ) ? $args['std'] : '';
-		}
-
-		$rows    = isset( $args['size'] ) ? $args['size'] : '10';
-		$wpautop = isset( $args['wpautop'] ) ? $args['wpautop'] : true;
-		$buttons = isset( $args['buttons'] ) ? $args['buttons'] : true;
-		$teeny   = isset( $args['teeny'] ) ? $args['teeny'] : false;
-
-		wp_editor(
-			$value,
-			$this->func . '_settings_' . $args['id'],
-			array(
-				'wpautop'       => $wpautop,
-				'media_buttons' => $buttons,
-				'textarea_name' => $this->func . '_settings[' . $args['id'] . ']',
-				'textarea_rows' => $rows,
-				'teeny'         => $teeny
-			)
-		);
-		$html = '<br /><span class="description"><label for="' . $this->func . '_settings[' . $args['id'] . ']">' . $args['desc'] . '</label></span>';
-
-		echo apply_filters( $this->func . '_after_setting_output', $html, $args );
-	}
-
-
-	/**
-	 * HTML callback
-	 *
-	 * @since       1.0.0
-	 * @param       array $args Arguments passed by the setting
-	 * @global      array ${$this->func . '_options'} The Beacon options
-	 * @return      void
-	 */
-	public function html_callback( $args ) {
-		global ${$this->func . '_options'};
-
-		if( isset( ${$this->func . '_options'}[$args['id']] ) ) {
-			$value = ${$this->func . '_options'}[$args['id']];
-		} else {
-			$value = isset( $args['std'] ) ? $args['std'] : '';
-		}
-
-		$html  = '<textarea class="large-text s214-html" cols="50" rows="5" id="' . $this->func . '_settings[' . $args['id'] . ']" name="' . $this->func . '_settings[' . $args['id'] . ']">' . esc_textarea( stripslashes( $value ) ) . '</textarea>&nbsp;';
-		$html .= '<span class="description"><label for="' . $this->func . '_settings[' . $args['id'] . ']">' . $args['desc'] . '</label></span>';
-
-		echo apply_filters( $this->func . '_after_setting_output', $html, $args );
-	}
-
-
-	/**
-	 * Multicheck callback
-	 *
-	 * @access      public
-	 * @since       1.0.0
-	 * @param       array $args Arguments passed by the setting
-	 * @global      array ${$this->func . '_options'} The Beacon options
-	 * @return      void
-	 */
-	public function multicheck_callback( $args ) {
-		global ${$this->func . '_options'};
-
-		if( ! empty( $args['options'] ) ) {
-			$html = '';
-
-			foreach( $args['options'] as $key => $option ) {
-				if( isset( ${$this->func . '_options'}[$args['id']][$key] ) ) {
-					$enabled = $option;
-				} else {
-					$enabled = isset( $args['std'][$key] ) ? $args['std'][$key] : NULL;
-				}
-
-				$html .= '<input name="' . $this->func . '_settings[' . $args['id'] . '][' . $key . ']" id="' . $this->func . '_settings[' . $args['id'] . '][' . $key . ']" type="checkbox" value="' . $option . '" ' . checked( $option, $enabled, false ) . ' />&nbsp;';
-				$html .= '<label for="' . $this->func . '_settings[' . $args['id'] . '][' . $key . ']">' . $option . '</label><br />';
-			}
-			$html .= '<p class="description">' . $args['desc'] . '</p>';
-
-			echo apply_filters( $this->func . '_after_setting_output', $html, $args );
-		}
-	}
-
-
-	/**
-	 * Number callback
-	 *
-	 * @access      public
-	 * @since       1.0.0
-	 * @param       array $args Arguments passed by the setting
-	 * @global      array ${$this->func . '_options'} The Beacon options
-	 * @return      void
-	 */
-	public function number_callback( $args ) {
-		global ${$this->func . '_options'};
-
-		if( isset( ${$this->func . '_options'}[$args['id']] ) ) {
-			$value = ${$this->func . '_options'}[$args['id']];
-		} else {
-			$value = isset( $args['std'] ) ? $args['std'] : '';
-		}
-
-		$name     = ' name="' . $this->func . '_settings[' . $args['id'] . ']"';
-		$max      = isset( $args['max'] ) ? $args['max'] : 999999;
-		$min      = isset( $args['min'] ) ? $args['min'] : 0;
-		$step     = isset( $args['step'] ) ? $args['step'] : 1;
-		$size     = ( isset( $args['size'] ) && ! is_null( $args['size'] ) ) ? $args['size'] : 'regular';
-		$readonly = $args['readonly'] === true ? ' readonly="readonly"' : '';
-
-		$html  = '<input type="number" step="' . esc_attr( $step ) . '" max="' . esc_attr( $max ) . '" min="' . esc_attr( $min ) . '" class="' . $size . '-text" id="' . $this->func . '_settings[' . $args['id'] . ']"' . $name . ' value="' . esc_attr( stripslashes( $value ) ) . '"' . $readonly . '/>&nbsp;';
-		$html .= '<span class="description"><label for="' . $this->func . '_settings[' . $args['id'] . ']">' . $args['desc'] . '</label></span>';
-
-		echo apply_filters( $this->func . '_after_setting_output', $html, $args );
-	}
-
-
-	/**
-	 * Password callback
-	 *
-	 * @access      public
-	 * @since       1.0.0
-	 * @param       array $args Arguments passed by the settings
-	 * @global      array ${$this->func . '_options'} The Beacon options
-	 * @return      void
-	 */
-	public function password_callback( $args ) {
-		global ${$this->func . '_options'};
-
-		if( isset( ${$this->func . '_options'}[$args['id']] ) ) {
-			$value = ${$this->func . '_options'}[$args['id']];
-		} else {
-			$value = isset( $args['std'] ) ? $args['std'] : '';
-		}
-
-		$size = ( isset( $args['size'] ) && ! is_null( $args['size'] ) ) ? $args['size'] : 'regular';
-
-		$readonly = $args['readonly'] === true ? ' readonly="readonly"' : '';
-
-		$html  = '<input type="password" class="' . $size . '-text" id="' . $this->func . '_settings[' . $args['id'] . ']" name="' . $this->func . '_settings[' . $args['id'] . ']" value="' . esc_attr( $value )  . '"' . $readonly . ' />&nbsp;';
-		$html .= '<span class="description"><label for="' . $this->func . '_settings[' . $args['id'] . ']">' . $args['desc'] . '</label></span>';
-
-		echo apply_filters( $this->func . '_after_setting_output', $html, $args );
-	}
-
-
-	/**
-	 * Radio callback
-	 *
-	 * @access      public
-	 * @since       1.0.0
-	 * @param       array $args Arguments passed by the setting
-	 * @global      array ${$this->func . '_options'} The Beacon options
-	 * @return      void
-	 */
-	public function radio_callback( $args ) {
-		global ${$this->func . '_options'};
-
-		if( ! empty( $args['options'] ) ) {
-			$html = '';
-
-			foreach( $args['options'] as $key => $option ) {
-				$checked = false;
-
-				if( isset( ${$this->func . '_options'}[$args['id']] ) && ${$this->func . '_options'}[$args['id']] == $key ) {
-					$checked = true;
-				} elseif( isset( $args['std'] ) && $args['std'] == $key && ! isset( ${$this->func . '_options'}[$args['id']] ) ) {
-					$checked = true;
-				}
-
-				$html .= '<input name="' . $this->func . '_settings[' . $args['id'] . ']" id="' . $this->func . '_settings[' . $args['id'] . '][' . $key . ']" type="radio" value="' . $key . '" ' . checked( true, $checked, false ) . '/>&nbsp;';
-				$html .= '<label for="' . $this->func . '_settings[' . $args['id'] . '][' . $key . ']">' . $option . '</label><br />';
-			}
-
-			$html .= '<p class="description">' . $args['desc'] . '</p>';
-
-			echo apply_filters( $this->func . '_after_setting_output', $html, $args );
-		}
-	}
-
-
-	/**
-	 * Select callback
-	 *
-	 * @access      public
-	 * @since       1.0.0
-	 * @param       array $args Arguments passed by the setting
-	 * @global      array ${$this->func . '_options'} The Beacon options
-	 * @return      void
-	 */
-	public function select_callback( $args ) {
-		global ${$this->func . '_options'};
-
-		if( isset( ${$this->func . '_options'}[$args['id']] ) ) {
-			$value = ${$this->func . '_options'}[$args['id']];
-		} else {
-			$value = isset( $args['std'] ) ? $args['std'] : '';
-		}
-
-		$placeholder = isset( $args['placeholder'] ) ? $args['placeholder'] : '';
-		$select2     = isset( $args['select2'] ) ? ' class="s214-select2"' : '';
-        $width       = isset( $args['size'] ) ? ' style="width: ' . $args['size'] . '"' : '';
-
-		if( isset( $args['multiple'] ) && $args['multiple'] === true ) {
-			$html = '<select id="' . $this->func . '_settings[' . $args['id'] . ']" name="' . $this->func . '_settings[' . $args['id'] . '][]"' . $select2 . ' data-placeholder="' . $placeholder . '" multiple="multiple"' . $width . ' />';
-		} else {
-			$html = '<select id="' . $this->func . '_settings[' . $args['id'] . ']" name="' . $this->func . '_settings[' . $args['id'] . ']"' . $select2 . ' data-placeholder="' . $placeholder . '"' . $width . ' />';
-		}
-
-		foreach( $args['options'] as $option => $name ) {
-			if( isset( $args['multiple'] ) && $args['multiple'] === true ) {
-				if( is_array( $value ) ) {
-					$selected = ( in_array( $option, $value ) ? 'selected="selected"' : '' );
-				} else {
-					$selected = '';
-				}
-			} else {
-				if( is_string( $value ) ) {
-					$selected = selected( $option, $value, false );
-				} else {
-					$selected = '';
-				}
-			}
-
-			$html .= '<option value="' . $option . '" ' . $selected . '>' . $name . '</option>';
-		}
-
-		$html .= '</select>&nbsp;';
-		$html .= '<span class="description"><label for="' . $this->func . '_settings[' . $args['id'] . ']">' . $args['desc'] . '</label></span>';
-
-		echo apply_filters( $this->func . '_after_setting_output', $html, $args );
-	}
-
-
-	/**
-	 * Sysinfo callback
-	 *
-	 * @since       1.1.0
-	 * @param       array $args Arguements passed by the settings
-	 * @return      void
-	 */
-	public function sysinfo_callback( $args ) {
-		global ${$this->func . '_options'};
-
-		if( ! isset( ${$this->func . '_options'}[$args['tab']] ) || ( isset( ${$this->func . '_options'}[$args['tab']] ) && isset( $_GET['tab'] ) && $_GET['tab'] == ${$this->func . '_options'}[$args['tab']] ) ) {
-			$html  = '<textarea readonly="readonly" onclick="this.focus(); this.select()" id="system-info-textarea" name="' . $this->func . '-system-info" title="' . __( 'To copy the system info, click below then press Ctrl + C (PC) or Cmd + C (Mac).', 'wpdesk-plugin' ) . '">' . $this->sysinfo->get_system_info() . '</textarea>';
-			$html .= '<p class="submit">';
-			$html .= '<input type="hidden" name="' . $this->slug . '-settings-action" value="download_system_info" />';
-			$html .= '<a class="button button-primary" href="' . add_query_arg( $this->slug . '-settings-action', 'download_system_info' ) . '">' . __( 'Download System Info File', 'wpdesk-plugin' ) . '</a>';
-			$html .= '</p>';
-
-			echo apply_filters( $this->func . '_after_setting_output', $html, $args );
-		}
-	}
-
-
-	/**
-	 * Text callback
-	 *
-	 * @since       1.0.0
-	 * @param       array $args Arguments passed by the setting
-	 * @global      array ${$this->func . '_options'} The Beacon options
-	 * @return      void
-	 */
-	public function text_callback( $args ) {
-		global ${$this->func . '_options'};
-
-		if( isset( ${$this->func . '_options'}[$args['id']] ) ) {
-			$value = ${$this->func . '_options'}[$args['id']];
-		} else {
-			$value = isset( $args['std'] ) ? $args['std'] : '';
-		}
-
-		$name     = ' name="' . $this->func . '_settings[' . $args['id'] . ']"';
-		$readonly = $args['readonly'] === true ? ' readonly="readonly"' : '';
-		$size     = ( isset( $args['size'] ) && ! is_null( $args['size'] ) ) ? $args['size'] : 'regular';
-
-		$html  = '<input type="text" class="' . $size . '-text" id="' . $this->func . '_settings[' . $args['id'] . ']"' . $name . ' value="' . esc_attr( stripslashes( $value ) )  . '"' . $readonly . '/>&nbsp;';
-		$html .= '<span class="description"><label for="' . $this->func . '_settings[' . $args['id'] . ']">' . $args['desc'] . '</label></span>';
-
-		echo apply_filters( $this->func . '_after_setting_output', $html, $args );
-	}
-
-
-	/**
-	 * Textarea callback
-	 *
-	 * @since       1.0.0
-	 * @param       array $args Arguments passed by the setting
-	 * @global      array ${$this->func . '_options'} The Beacon options
-	 * @return      void
-	 */
-	public function textarea_callback( $args ) {
-		global ${$this->func . '_options'};
-
-		if( isset( ${$this->func . '_options'}[$args['id']] ) ) {
-			$value = ${$this->func . '_options'}[$args['id']];
-		} else {
-			$value = isset( $args['std'] ) ? $args['std'] : '';
-		}
-
-		$html  = '<textarea class="large-text" cols="50" rows="5" id="' . $this->func . '_settings[' . $args['id'] . ']" name="' . $this->func . '_settings[' . $args['id'] . ']">' . esc_textarea( stripslashes( $value ) ) . '</textarea>&nbsp;';
-		$html .= '<span class="description"><label for="' . $this->func . '_settings[' . $args['id'] . ']">' . $args['desc'] . '</label></span>';
-
-		echo apply_filters( $this->func . '_after_setting_output', $html, $args );
-	}
-
-
-	/**
-	 * Upload callback
-	 *
-	 * @since       1.0.0
-	 * @param       array $args Arguments passed by the setting
-	 * @global      array ${$this->func . '_options'} The Beacon options
-	 * @return      void
-	 */
-	public function upload_callback( $args ) {
-		global ${$this->func . '_options'};
-
-		if( isset( ${$this->func . '_options'}[$args['id']] ) ) {
-			$value = ${$this->func . '_options'}[$args['id']];
-		} else {
-			$value = isset( $args['std'] ) ? $args['std'] : '';
-		}
-
-		$size = ( isset( $args['size'] ) && ! is_null( $args['size'] ) ) ? $args['size'] : 'regular';
-
-		$html  = '<input type="text" class="' . $size . '-text" id="' . $this->func . '_settings[' . $args['id'] . ']" name="' . $this->func . '_settings[' . $args['id'] . ']" value="' . esc_attr( stripslashes( $value ) ) . '" />&nbsp;';
-		$html .= '<span><input type="button" class="' . $this->func . '_settings_upload_button button-secondary" value="' . __( 'Upload File', 'wpdesk-plugin' ) . '" /></span>&nbsp;';
-		$html .= '<span class="description"><label for="' . $this->func . '_settings[' . $args['id'] . ']">' . $args['desc'] . '</label></span>';
-
-		echo apply_filters( $this->func . '_after_setting_output', $html, $args );
-	}
-
-
-	/**
-	 * License field callback
-	 *
-	 * @access      public
-	 * @since       1.0.0
-	 * @param       array $args Arguments passed by the setting
-	 * @global      array ${$this->func . '_options'} The Beacon options
-	 * @return      void
-	 */
-	public function license_key_callback( $args ) {
-		global ${$this->func . '_options'};
-
-		if( isset( ${$this->func . '_options'}[$args['id']] ) ) {
-			$value = ${$this->func . '_options'}[$args['id']];
-		} else {
-			$value = isset( $args['std'] ) ? $args['std'] : '';
-		}
-
-		$size = ( isset( $args['size'] ) && ! is_null( $args['size'] ) ) ? $args['size'] : 'regular';
-
-		$html = '<input type="text" class="' . $size . '-text" id="' . $this->func . '_settings[' . $args['id'] . ']" name="' . $this->func . '_settings[' . $args['id'] . ']" value="' . esc_attr( $value ) . '" />&nbsp;';
-
-		if( get_option( $args['options']['is_valid_license_option'] ) ) {
-			$html .= '<input type="submit" class="button-secondary" name="' . $args['id'] . '_deactivate" value="' . __( 'Deactivate License',  'wpdesk-plugin' ) . '"/>';
-		}
-		$html .= '<span class="description"><label for="' . $this->func . '_settings[' . $args['id'] . ']"> '  . $args['desc'] . '</label></span>';
-
-		wp_nonce_field( $args['id'] . '-nonce', $args['id'] . '-nonce' );
-
-		echo apply_filters( $this->func . '_after_setting_output', $html, $args );
-	}
-
-
-	/**
-	 * Hook callback
-	 *
-	 * @since       1.0.0
-	 * @param       array $args Arguments passed by the setting
-	 * @return      void
-	 */
-	public function hook_callback( $args ) {
-		do_action( $this->func . '_' . $args['id'] );
-	}
-
-
-	/**
-	 * Missing callback
-	 *
-	 * @access      public
-	 * @since       1.0.0
-	 * @param       array $args Arguments passed by the setting
-	 * @return      void
-	 */
-	public function missing_callback( $args ) {
-		printf( __( 'The callback function used for the <strong>%s</strong> setting is missing.', 'wpdesk-plugin' ), $args['id'] );
-	}
-
-
-	/**
-	 * Check if we should load admin scripts
-	 *
-	 * @access      public
-	 * @since       1.0.0
-	 * @param       string $hook The hook for the current page
-	 * @return      bool true if we should load scripts, false otherwise
-	 */
-	public function load_scripts( $hook ) {
-		global $typenow, $pagenow, ${$this->func . '_settings_page'};
-
-		$ret    = false;
-		$pages  = apply_filters( $this->func . '_admin_pages', array( ${$this->func . '_settings_page'} ) );
-
-		if( in_array( $hook, $pages ) ) {
-			$ret = true;
-		}
-
-		return (bool) apply_filters( $this->func . 'load_scripts', $ret );
-	}
-
-
-	/**
-	 * Processes all actions sent via POST and GET by looking for the '$func-settings-action'
-	 * request and running do_action() to call the function
-	 *
-	 * @since       1.1.0
-	 * @return      void
-	 */
-	function process_actions() {
-		if( ! isset( $_POST['submit'] ) ) {
-			if( isset( $_POST[$this->slug . '-settings-action'] ) ) {
-				do_action( $this->func . '_settings_' . $_POST[$this->slug . '-settings-action'], $_POST );
-			}
-
-			if( isset( $_GET[$this->slug . '-settings-action'] ) ) {
-				do_action( $this->func . '_settings_' . $_GET[$this->slug . '-settings-action'], $_GET );
-			}
-		}
-	}
-
-
-	/**
-	 * Enqueue scripts
-	 *
-	 * @access      public
-	 * @since       1.0.0
-	 * @param       string $hook The current page hook
-	 * @return      void
-	 */
-	public function enqueue_scripts( $hook ) {
-		if( ! apply_filters( $this->func . '_load_admin_scripts', $this->load_scripts( $hook ), $hook ) ) {
-			return;
-		}
-
-		// Use minified libraries if SCRIPT_DEBUG is turned off
-		$suffix      = ( defined( 'SCRIPT_DEBUG' ) && SCRIPT_DEBUG ) ? '' : '.min';
-		$ui_style    = ( get_user_option( 'admin_color' ) == 'classic' ) ? 'classic' : 'fresh';
-		$url_path    = str_replace( WP_CONTENT_DIR, WP_CONTENT_URL, dirname( __FILE__ ) );
-		$select2_cdn = 'https://cdnjs.cloudflare.com/ajax/libs/select2/4.0.2/';
-		$cm_cdn      = 'https://cdnjs.cloudflare.com/ajax/libs/codemirror/5.14.2/';
-
-		wp_enqueue_style( 'wp-color-picker' );
-		wp_enqueue_script( 'wp-color-picker' );
-		wp_enqueue_script( 'jquery-ui-tooltip' );
-		wp_enqueue_media();
-		wp_enqueue_style( 'jquery-ui-css', $url_path . '/assets/css/jquery-ui-' . $ui_style . '.min.css' );
-		wp_enqueue_script( 'media-upload' );
-		wp_enqueue_style( 'thickbox' );
-		wp_enqueue_script( 'thickbox' );
-		wp_enqueue_style( 'select2', $select2_cdn . 'css/select2.min.css', array(), '4.0.2' );
-		wp_enqueue_script( 'select2', $select2_cdn . 'js/select2.min.js', array( 'jquery' ), '4.0.2' );
-
-		wp_enqueue_style( $this->slug . '-cm', $cm_cdn . 'codemirror.css', array(), '5.10' );
-		wp_enqueue_script( $this->slug . '-cm', $cm_cdn . 'codemirror.js', array( 'jquery' ), '5.14.2' );
-		wp_enqueue_script( $this->slug . '-cm-html', $cm_cdn . 'mode/htmlmixed/htmlmixed.js', array( 'jquery', $this->slug . '-cm' ), '5.14.2' );
-		wp_enqueue_script( $this->slug . '-cm-xml', $cm_cdn . 'mode/xml/xml.js', array( 'jquery', $this->slug . '-cm' ), '5.14.2' );
-		wp_enqueue_script( $this->slug . '-cm-js', $cm_cdn . 'mode/javascript/javascript.js', array( 'jquery', $this->slug . '-cm' ), '5.14.2' );
-		wp_enqueue_script( $this->slug . '-cm-css', $cm_cdn . 'mode/css/css.js', array( 'jquery', $this->slug . '-cm' ), '5.14.2' );
-		wp_enqueue_script( $this->slug . '-cm-php', $cm_cdn . 'mode/php/php.js', array( 'jquery', $this->slug . '-cm' ), '5.14.2' );
-		wp_enqueue_script( $this->slug . '-cm-clike', $cm_cdn . 'mode/clike/clike.js', array( 'jquery', $this->slug . '-cm' ), '5.14.2' );
-
-		wp_enqueue_style( $this->slug, $url_path . '/assets/css/admin' . $suffix . '.css', array(), $this->version );
-		wp_enqueue_script( $this->slug, $url_path . '/assets/js/admin' . $suffix . '.js', array( 'jquery' ), $this->version );
-		wp_localize_script( $this->slug, 's214_settings_vars', apply_filters( $this->func . 'localize_script', array(
-			'func'               => $this->func,
-			'image_media_button' => __( 'Insert Image', 'wpdesk-plugin' ),
-			'image_media_title'  => __( 'Select Image', 'wpdesk-plugin' ),
-		) ) );
-	}
-
-
-	/**
-	 * Add tooltips
-	 *
-	 * @access      public
-	 * @since       1.2.0
-	 * @param       string $html The current field HTML
-	 * @param       array $args Arguments passed to the field
-	 * @return      string $html The updated field HTML
-	 */
-	function add_setting_tooltip( $html, $args ) {
-		if( ! empty( $args['tooltip_title'] ) && ! empty( $args['tooltip_desc'] ) ) {
-			$tooltip = '<span alt="f223" class="s214-help-tip dashicons dashicons-editor-help" title="<strong>' . $args['tooltip_title'] . '</strong>: ' . $args['tooltip_desc'] . '"></span>';
-			$html .= $tooltip;
-		}
-
-		return $html;
-	}
-}
diff --git a/classes/wpdesk/settings-api/modules/sysinfo/browser.php b/classes/wpdesk/settings-api/modules/sysinfo/browser.php
deleted file mode 100644
index 437942100c7c3f499aa90ed183b16ca1697cdc32..0000000000000000000000000000000000000000
--- a/classes/wpdesk/settings-api/modules/sysinfo/browser.php
+++ /dev/null
@@ -1,1103 +0,0 @@
-<?php
-
-// Exit if accessed directly
-if ( ! defined( 'ABSPATH' ) ) exit;
-
-/**
- * Modified to remove var
- * Chris Christoff on 12/26/2012
- * Changes: Changes vars to publics
- *
- * Modified to work for EDD by
- * Chris Christoff on 12/23/2012
- * Changes: Removed the browser string return and added spacing. Also removed return HTML formatting.
- *
- * Modified to add formatted User Agent string for EDD System Info by
- * Chris Christoff on 12/23/2012
- * Changes: Split user string and add formatting so we can print a nicely
- * formatted user agent string on the EDD System Info
- *
- * File: Browser.php
- * Author: Chris Schuld (http://chrisschuld.com/)
- * Last Modified: August 20th, 2010
- *
- * @version 1.9
- * @package PegasusPHP
- *
- * Copyright (C) 2008-2010 Chris Schuld  (chris@chrisschuld.com)
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License as
- * published by the Free Software Foundation; either version 2 of
- * the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details at:
- * http://www.gnu.org/copyleft/gpl.html
- *
- *
- * Typical Usage:
- *
- *   $browser = new Browser();
- *   if( $browser->getBrowser() == Browser::BROWSER_FIREFOX && $browser->getVersion() >= 2 ) {
- *    echo 'You have FireFox version 2 or greater';
- *   }
- *
- * User Agents Sampled from: http://www.useragentstring.com/
- *
- * This implementation is based on the original work from Gary White
- * http://apptools.com/phptools/browser/
- *
- * UPDATES:
- *
- * 2010-08-20 (v1.9):
- *  + Added MSN Explorer Browser (legacy)
- *  + Added Bing/MSN Robot (Thanks Rob MacDonald)
- *  + Added the Android Platform (PLATFORM_ANDROID)
- *  + Fixed issue with Android 1.6/2.2 (Thanks Tom Hirashima)
- *
- * 2010-04-27 (v1.8):
- *  + Added iPad Support
- *
- * 2010-03-07 (v1.7):
- *  + *MAJOR* Rebuild (preg_match and other "slow" routine removal(s))
- *  + Almost allof Gary's original code has been replaced
- *  + Large PHPUNIT testing environment created to validate new releases and additions
- *  + Added FreeBSD Platform
- *  + Added OpenBSD Platform
- *  + Added NetBSD Platform
- *  + Added SunOS Platform
- *  + Added OpenSolaris Platform
- *  + Added support of the Iceweazel Browser
- *  + Added isChromeFrame() call to check if chromeframe is in use
- *  + Moved the Opera check in front of the Firefox check due to legacy Opera User Agents
- *  + Added the __toString() method (Thanks Deano)
- *
- * 2009-11-15:
- *  + Updated the checkes for Firefox
- *  + Added the NOKIA platform
- *  + Added Checks for the NOKIA brower(s)
- *
- * 2009-11-08:
- *  + PHP 5.3 Support
- *  + Added support for BlackBerry OS and BlackBerry browser
- *  + Added support for the Opera Mini browser
- *  + Added additional documenation
- *  + Added support for isRobot() and isMobile()
- *  + Added support for Opera version 10
- *  + Added support for deprecated Netscape Navigator version 9
- *  + Added support for IceCat
- *  + Added support for Shiretoko
- *
- * 2010-04-27 (v1.8):
- *  + Added iPad Support
- *
- * 2009-08-18:
- *  + Updated to support PHP 5.3 - removed all deprecated function calls
- *  + Updated to remove all double quotes (") -- converted to single quotes (')
- *
- * 2009-04-27:
- *  + Updated the IE check to remove a typo and bug (thanks John)
- *
- * 2009-04-22:
- *  + Added detection for GoogleBot
- *  + Added detection for the W3C Validator.
- *  + Added detection for Yahoo! Slurp
- *
- * 2009-03-14:
- *  + Added detection for iPods.
- *  + Added Platform detection for iPhones
- *  + Added Platform detection for iPods
- *
- * 2009-02-16: (Rick Hale)
- *  + Added version detection for Android phones.
- *
- * 2008-12-09:
- *  + Removed unused constant
- *
- * 2008-11-07:
- *  + Added Google's Chrome to the detection list
- *  + Added isBrowser(string) to the list of functions special thanks to
- *    Daniel 'mavrick' Lang for the function concept (http://mavrick.id.au)
- *
- *
- * Gary White noted: "Since browser detection is so unreliable, I am
- * no longer maintaining this script. You are free to use and or
- * modify/update it as you want, however the author assumes no
- * responsibility for the accuracy of the detected values."
- *
- * Anyone experienced with Gary's script might be interested in these notes:
- *
- *   Added class constants
- *   Added detection and version detection for Google's Chrome
- *   Updated the version detection for Amaya
- *   Updated the version detection for Firefox
- *   Updated the version detection for Lynx
- *   Updated the version detection for WebTV
- *   Updated the version detection for NetPositive
- *   Updated the version detection for IE
- *   Updated the version detection for OmniWeb
- *   Updated the version detection for iCab
- *   Updated the version detection for Safari
- *   Updated Safari to remove mobile devices (iPhone)
- *   Added detection for iPhone
- *   Added detection for robots
- *   Added detection for mobile devices
- *   Added detection for BlackBerry
- *   Removed Netscape checks (matches heavily with firefox & mozilla)
- *
- */
-
-class Browser {
-	public $_agent = '';
-	public $_browser_name = '';
-	public $_version = '';
-	public $_platform = '';
-	public $_os = '';
-	public $_is_aol = false;
-	public $_is_mobile = false;
-	public $_is_robot = false;
-	public $_aol_version = '';
-
-	public $BROWSER_UNKNOWN = 'unknown';
-	public $VERSION_UNKNOWN = 'unknown';
-
-	public $BROWSER_OPERA = 'Opera';                            // Http://www.opera.com/
-	public $BROWSER_OPERA_MINI = 'Opera Mini';                  // Http://www.opera.com/mini/
-	public $BROWSER_WEBTV = 'WebTV';                            // Http://www.webtv.net/pc/
-	public $BROWSER_IE = 'Internet Explorer';                   // Http://www.microsoft.com/ie/
-	public $BROWSER_POCKET_IE = 'Pocket Internet Explorer';     // Http://en.wikipedia.org/wiki/Internet_Explorer_Mobile
-	public $BROWSER_KONQUEROR = 'Konqueror';                    // Http://www.konqueror.org/
-	public $BROWSER_ICAB = 'iCab';                              // Http://www.icab.de/
-	public $BROWSER_OMNIWEB = 'OmniWeb';                        // Http://www.omnigroup.com/applications/omniweb/
-	public $BROWSER_FIREBIRD = 'Firebird';                      // Http://www.ibphoenix.com/
-	public $BROWSER_FIREFOX = 'Firefox';                        // Http://www.mozilla.com/en-US/firefox/firefox.html
-	public $BROWSER_ICEWEASEL = 'Iceweasel';                    // Http://www.geticeweasel.org/
-	public $BROWSER_SHIRETOKO = 'Shiretoko';                    // Http://wiki.mozilla.org/Projects/shiretoko
-	public $BROWSER_MOZILLA = 'Mozilla';                        // Http://www.mozilla.com/en-US/
-	public $BROWSER_AMAYA = 'Amaya';                            // Http://www.w3.org/Amaya/
-	public $BROWSER_LYNX = 'Lynx';                              // Http://en.wikipedia.org/wiki/Lynx
-	public $BROWSER_SAFARI = 'Safari';                          // Http://apple.com
-	public $BROWSER_IPHONE = 'iPhone';                          // Http://apple.com
-	public $BROWSER_IPOD = 'iPod';                              // Http://apple.com
-	public $BROWSER_IPAD = 'iPad';                              // Http://apple.com
-	public $BROWSER_CHROME = 'Chrome';                          // Http://www.google.com/chrome
-	public $BROWSER_ANDROID = 'Android';                        // Http://www.android.com/
-	public $BROWSER_GOOGLEBOT = 'GoogleBot';                    // Http://en.wikipedia.org/wiki/Googlebot
-	public $BROWSER_SLURP = 'Yahoo! Slurp';                     // Http://en.wikipedia.org/wiki/Yahoo!_Slurp
-	public $BROWSER_W3CVALIDATOR = 'W3C Validator';             // Http://validator.w3.org/
-	public $BROWSER_BLACKBERRY = 'BlackBerry';                  // Http://www.blackberry.com/
-	public $BROWSER_ICECAT = 'IceCat';                          // Http://en.wikipedia.org/wiki/GNU_IceCat
-	public $BROWSER_NOKIA_S60 = 'Nokia S60 OSS Browser';        // Http://en.wikipedia.org/wiki/Web_Browser_for_S60
-	public $BROWSER_NOKIA = 'Nokia Browser';                    // * all other WAP-based browsers on the Nokia Platform
-	public $BROWSER_MSN = 'MSN Browser';                        // Http://explorer.msn.com/
-	public $BROWSER_MSNBOT = 'MSN Bot';                         // Http://search.msn.com/msnbot.htm
-	// Http://en.wikipedia.org/wiki/Msnbot  (used for Bing as well)
-
-	public $BROWSER_NETSCAPE_NAVIGATOR = 'Netscape Navigator';  // Http://browser.netscape.com/ (DEPRECATED)
-	public $BROWSER_GALEON = 'Galeon';                          // Http://galeon.sourceforge.net/ (DEPRECATED)
-	public $BROWSER_NETPOSITIVE = 'NetPositive';                // Http://en.wikipedia.org/wiki/NetPositive (DEPRECATED)
-	public $BROWSER_PHOENIX = 'Phoenix';                        // Http://en.wikipedia.org/wiki/History_of_Mozilla_Firefox (DEPRECATED)
-
-	public $PLATFORM_UNKNOWN = 'unknown';
-	public $PLATFORM_WINDOWS = 'Windows';
-	public $PLATFORM_WINDOWS_CE = 'Windows CE';
-	public $PLATFORM_APPLE = 'Apple';
-	public $PLATFORM_LINUX = 'Linux';
-	public $PLATFORM_OS2 = 'OS/2';
-	public $PLATFORM_BEOS = 'BeOS';
-	public $PLATFORM_IPHONE = 'iPhone';
-	public $PLATFORM_IPOD = 'iPod';
-	public $PLATFORM_IPAD = 'iPad';
-	public $PLATFORM_BLACKBERRY = 'BlackBerry';
-	public $PLATFORM_NOKIA = 'Nokia';
-	public $PLATFORM_FREEBSD = 'FreeBSD';
-	public $PLATFORM_OPENBSD = 'OpenBSD';
-	public $PLATFORM_NETBSD = 'NetBSD';
-	public $PLATFORM_SUNOS = 'SunOS';
-	public $PLATFORM_OPENSOLARIS = 'OpenSolaris';
-	public $PLATFORM_ANDROID = 'Android';
-
-	public $OPERATING_SYSTEM_UNKNOWN = 'unknown';
-
-	function __construct( $useragent="" ) {
-		$this->reset();
-		if ( $useragent != "" ) {
-			$this->setUserAgent( $useragent );
-		} else {
-			$this->determine();
-		}
-	}
-
-	/**
-	 * Reset all properties
-	 */
-	function reset() {
-		$this->_agent = isset( $_SERVER['HTTP_USER_AGENT'] ) ? $_SERVER['HTTP_USER_AGENT'] : "";
-		$this->_browser_name = $this->BROWSER_UNKNOWN;
-		$this->_version = $this->VERSION_UNKNOWN;
-		$this->_platform = $this->PLATFORM_UNKNOWN;
-		$this->_os = $this->OPERATING_SYSTEM_UNKNOWN;
-		$this->_is_aol = false;
-		$this->_is_mobile = false;
-		$this->_is_robot = false;
-		$this->_aol_version = $this->VERSION_UNKNOWN;
-	}
-
-	/**
-	 * Check to see if the specific browser is valid
-	 *
-	 * @param string  $browserName
-	 * @return True if the browser is the specified browser
-	 */
-	function isBrowser( $browserName ) { return 0 == strcasecmp( $this->_browser_name, trim( $browserName ) ); }
-
-	/**
-	 * The name of the browser.  All return types are from the class contants
-	 *
-	 * @return string Name of the browser
-	 */
-	function getBrowser() { return $this->_browser_name; }
-	/**
-	 * Set the name of the browser
-	 *
-	 * @param unknown $browser The name of the Browser
-	 */
-	function setBrowser( $browser ) { return $this->_browser_name = $browser; }
-	/**
-	 * The name of the platform.  All return types are from the class contants
-	 *
-	 * @return string Name of the browser
-	 */
-	function getPlatform() { return $this->_platform; }
-	/**
-	 * Set the name of the platform
-	 *
-	 * @param unknown $platform The name of the Platform
-	 */
-	function setPlatform( $platform ) { return $this->_platform = $platform; }
-	/**
-	 * The version of the browser.
-	 *
-	 * @return string Version of the browser (will only contain alpha-numeric characters and a period)
-	 */
-	function getVersion() { return $this->_version; }
-	/**
-	 * Set the version of the browser
-	 *
-	 * @param unknown $version The version of the Browser
-	 */
-	function setVersion( $version ) { $this->_version = preg_replace( '/[^0-9,.,a-z,A-Z-]/', '', $version ); }
-	/**
-	 * The version of AOL.
-	 *
-	 * @return string Version of AOL (will only contain alpha-numeric characters and a period)
-	 */
-	function getAolVersion() { return $this->_aol_version; }
-	/**
-	 * Set the version of AOL
-	 *
-	 * @param unknown $version The version of AOL
-	 */
-	function setAolVersion( $version ) { $this->_aol_version = preg_replace( '/[^0-9,.,a-z,A-Z]/', '', $version ); }
-	/**
-	 * Is the browser from AOL?
-	 *
-	 * @return boolean True if the browser is from AOL otherwise false
-	 */
-	function isAol() { return $this->_is_aol; }
-	/**
-	 * Is the browser from a mobile device?
-	 *
-	 * @return boolean True if the browser is from a mobile device otherwise false
-	 */
-	function isMobile() { return $this->_is_mobile; }
-	/**
-	 * Is the browser from a robot (ex Slurp,GoogleBot)?
-	 *
-	 * @return boolean True if the browser is from a robot otherwise false
-	 */
-	function isRobot() { return $this->_is_robot; }
-	/**
-	 * Set the browser to be from AOL
-	 *
-	 * @param unknown $isAol
-	 */
-	function setAol( $isAol ) { $this->_is_aol = $isAol; }
-	/**
-	 * Set the Browser to be mobile
-	 *
-	 * @param boolean $value is the browser a mobile brower or not
-	 */
-	function setMobile( $value=true ) { $this->_is_mobile = $value; }
-	/**
-	 * Set the Browser to be a robot
-	 *
-	 * @param boolean $value is the browser a robot or not
-	 */
-	function setRobot( $value=true ) { $this->_is_robot = $value; }
-	/**
-	 * Get the user agent value in use to determine the browser
-	 *
-	 * @return string The user agent from the HTTP header
-	 */
-	function getUserAgent() { return $this->_agent; }
-	/**
-	 * Set the user agent value (the construction will use the HTTP header value - this will overwrite it)
-	 *
-	 * @param unknown $agent_string The value for the User Agent
-	 */
-	function setUserAgent( $agent_string ) {
-		$this->reset();
-		$this->_agent = $agent_string;
-		$this->determine();
-	}
-	/**
-	 * Used to determine if the browser is actually "chromeframe"
-	 *
-	 * @since 1.7
-	 * @return boolean True if the browser is using chromeframe
-	 */
-	function isChromeFrame() {
-		return strpos( $this->_agent, "chromeframe" ) !== false;
-	}
-	/**
-	 * Returns a formatted string with a summary of the details of the browser.
-	 *
-	 * @return string formatted string with a summary of the browser
-	 */
-	function __toString() {
-		$text1   = $this->getUserAgent(); //grabs the UA (user agent) string
-		$UAline1 = substr( $text1, 0, 32 ); //the first line we print should only be the first 32 characters of the UA string
-		$text2       = $this->getUserAgent();//now we grab it again and save it to a string
-		$towrapUA    = str_replace( $UAline1, '', $text2 );//the rest of the printoff (other than first line) is equivolent
-		// To the whole string minus the part we printed off. IE
-		// User Agent:      thefirst32charactersfromUAline1
-		//                  the rest of it is now stored in
-		//                  $text2 to be printed off
-		// But we need to add spaces before each line that is split other than line 1
-		$space = '';
-		for ( $i = 0; $i < 25; $i++ ) {
-			$space .= ' ';
-		}
-		// Now we split the remaining string of UA ($text2) into lines that are prefixed by spaces for formatting
-		$wordwrapped = chunk_split( $towrapUA, 32, "\n $space" );
-		return "Platform:                 {$this->getPlatform()} \n".
-			"Browser Name:             {$this->getBrowser()}  \n" .
-			"Browser Version:          {$this->getVersion()} \n" .
-			"User Agent String:        $UAline1 \n\t\t\t  " .
-			"$wordwrapped";
-	}
-	/**
-	 * Protected routine to calculate and determine what the browser is in use (including platform)
-	 */
-	function determine() {
-		$this->checkPlatform();
-		$this->checkBrowsers();
-		$this->checkForAol();
-	}
-	/**
-	 * Protected routine to determine the browser type
-	 *
-	 * @return boolean True if the browser was detected otherwise false
-	 */
-	function checkBrowsers() {
-		return (
-			// Well-known, well-used
-			// Special Notes:
-			// (1) Opera must be checked before FireFox due to the odd
-			//     user agents used in some older versions of Opera
-			// (2) WebTV is strapped onto Internet Explorer so we must
-			//     check for WebTV before IE
-			// (3) (deprecated) Galeon is based on Firefox and needs to be
-			//     tested before Firefox is tested
-			// (4) OmniWeb is based on Safari so OmniWeb check must occur
-			//     before Safari
-			// (5) Netscape 9+ is based on Firefox so Netscape checks
-			//     before FireFox are necessary
-			$this->checkBrowserWebTv() ||
-			$this->checkBrowserInternetExplorer() ||
-			$this->checkBrowserOpera() ||
-			$this->checkBrowserGaleon() ||
-			$this->checkBrowserNetscapeNavigator9Plus() ||
-			$this->checkBrowserFirefox() ||
-			$this->checkBrowserChrome() ||
-			$this->checkBrowserOmniWeb() ||
-
-			// Common mobile
-			$this->checkBrowserAndroid() ||
-			$this->checkBrowseriPad() ||
-			$this->checkBrowseriPod() ||
-			$this->checkBrowseriPhone() ||
-			$this->checkBrowserBlackBerry() ||
-			$this->checkBrowserNokia() ||
-
-			// Common bots
-			$this->checkBrowserGoogleBot() ||
-			$this->checkBrowserMSNBot() ||
-			$this->checkBrowserSlurp() ||
-
-			// WebKit base check (post mobile and others)
-			$this->checkBrowserSafari() ||
-
-			// Everyone else
-			$this->checkBrowserNetPositive() ||
-			$this->checkBrowserFirebird() ||
-			$this->checkBrowserKonqueror() ||
-			$this->checkBrowserIcab() ||
-			$this->checkBrowserPhoenix() ||
-			$this->checkBrowserAmaya() ||
-			$this->checkBrowserLynx() ||
-
-			$this->checkBrowserShiretoko() ||
-			$this->checkBrowserIceCat() ||
-			$this->checkBrowserW3CValidator() ||
-			$this->checkBrowserMozilla() /* Mozilla is such an open standard that you must check it last */
-		);
-	}
-
-	/**
-	 * Determine if the user is using a BlackBerry (last updated 1.7)
-	 *
-	 * @return boolean True if the browser is the BlackBerry browser otherwise false
-	 */
-	function checkBrowserBlackBerry() {
-		if ( stripos( $this->_agent, 'blackberry' ) !== false ) {
-			$aresult = explode( "/", stristr( $this->_agent, "BlackBerry" ) );
-			$aversion = explode( ' ', $aresult[1] );
-			$this->setVersion( $aversion[0] );
-			$this->_browser_name = $this->BROWSER_BLACKBERRY;
-			$this->setMobile( true );
-			return true;
-		}
-		return false;
-	}
-
-	/**
-	 * Determine if the user is using an AOL User Agent (last updated 1.7)
-	 *
-	 * @return boolean True if the browser is from AOL otherwise false
-	 */
-	function checkForAol() {
-		$this->setAol( false );
-		$this->setAolVersion( $this->VERSION_UNKNOWN );
-
-		if ( stripos( $this->_agent, 'aol' ) !== false ) {
-			$aversion = explode( ' ', stristr( $this->_agent, 'AOL' ) );
-			$this->setAol( true );
-			$this->setAolVersion( preg_replace( '/[^0-9\.a-z]/i', '', $aversion[1] ) );
-			return true;
-		}
-		return false;
-	}
-
-	/**
-	 * Determine if the browser is the GoogleBot or not (last updated 1.7)
-	 *
-	 * @return boolean True if the browser is the GoogletBot otherwise false
-	 */
-	function checkBrowserGoogleBot() {
-		if ( stripos( $this->_agent, 'googlebot' ) !== false ) {
-			$aresult = explode( '/', stristr( $this->_agent, 'googlebot' ) );
-			$aversion = explode( ' ', $aresult[1] );
-			$this->setVersion( str_replace( ';', '', $aversion[0] ) );
-			$this->_browser_name = $this->BROWSER_GOOGLEBOT;
-			$this->setRobot( true );
-			return true;
-		}
-		return false;
-	}
-
-	/**
-	 * Determine if the browser is the MSNBot or not (last updated 1.9)
-	 *
-	 * @return boolean True if the browser is the MSNBot otherwise false
-	 */
-	function checkBrowserMSNBot() {
-		if ( stripos( $this->_agent, "msnbot" ) !== false ) {
-			$aresult = explode( "/", stristr( $this->_agent, "msnbot" ) );
-			$aversion = explode( " ", $aresult[1] );
-			$this->setVersion( str_replace( ";", "", $aversion[0] ) );
-			$this->_browser_name = $this->BROWSER_MSNBOT;
-			$this->setRobot( true );
-			return true;
-		}
-		return false;
-	}
-
-	/**
-	 * Determine if the browser is the W3C Validator or not (last updated 1.7)
-	 *
-	 * @return boolean True if the browser is the W3C Validator otherwise false
-	 */
-	function checkBrowserW3CValidator() {
-		if ( stripos( $this->_agent, 'W3C-checklink' ) !== false ) {
-			$aresult = explode( '/', stristr( $this->_agent, 'W3C-checklink' ) );
-			$aversion = explode( ' ', $aresult[1] );
-			$this->setVersion( $aversion[0] );
-			$this->_browser_name = $this->BROWSER_W3CVALIDATOR;
-			return true;
-		} else if ( stripos( $this->_agent, 'W3C_Validator' ) !== false ) {
-			// Some of the Validator versions do not delineate w/ a slash - add it back in
-			$ua = str_replace( "W3C_Validator ", "W3C_Validator/", $this->_agent );
-			$aresult = explode( '/', stristr( $ua, 'W3C_Validator' ) );
-			$aversion = explode( ' ', $aresult[1] );
-			$this->setVersion( $aversion[0] );
-			$this->_browser_name = $this->BROWSER_W3CVALIDATOR;
-			return true;
-		}
-		return false;
-	}
-
-	/**
-	 * Determine if the browser is the Yahoo! Slurp Robot or not (last updated 1.7)
-	 *
-	 * @return boolean True if the browser is the Yahoo! Slurp Robot otherwise false
-	 */
-	function checkBrowserSlurp() {
-		if ( stripos( $this->_agent, 'slurp' ) !== false ) {
-			$aresult = explode( '/', stristr( $this->_agent, 'Slurp' ) );
-			$aversion = explode( ' ', $aresult[1] );
-			$this->setVersion( $aversion[0] );
-			$this->_browser_name = $this->BROWSER_SLURP;
-			$this->setRobot( true );
-			$this->setMobile( false );
-			return true;
-		}
-		return false;
-	}
-
-	/**
-	 * Determine if the browser is Internet Explorer or not (last updated 1.7)
-	 *
-	 * @return boolean True if the browser is Internet Explorer otherwise false
-	 */
-	function checkBrowserInternetExplorer() {
-
-		// Test for v1 - v1.5 IE
-		if ( stripos( $this->_agent, 'microsoft internet explorer' ) !== false ) {
-			$this->setBrowser( $this->BROWSER_IE );
-			$this->setVersion( '1.0' );
-			$aresult = stristr( $this->_agent, '/' );
-			if ( preg_match( '/308|425|426|474|0b1/i', $aresult ) ) {
-				$this->setVersion( '1.5' );
-			}
-			return true;
-		}
-		// Test for versions > 1.5
-		else if ( stripos( $this->_agent, 'msie' ) !== false && stripos( $this->_agent, 'opera' ) === false ) {
-			// See if the browser is the odd MSN Explorer
-			if ( stripos( $this->_agent, 'msnb' ) !== false ) {
-				$aresult = explode( ' ', stristr( str_replace( ';', '; ', $this->_agent ), 'MSN' ) );
-				$this->setBrowser( $this->BROWSER_MSN );
-				$this->setVersion( str_replace( array( '(', ')', ';' ), '', $aresult[1] ) );
-				return true;
-			}
-			$aresult = explode( ' ', stristr( str_replace( ';', '; ', $this->_agent ), 'msie' ) );
-			$this->setBrowser( $this->BROWSER_IE );
-			$this->setVersion( str_replace( array( '(', ')', ';' ), '', $aresult[1] ) );
-			return true;
-		}
-		// Test for Pocket IE
-		else if ( stripos( $this->_agent, 'mspie' ) !== false || stripos( $this->_agent, 'pocket' ) !== false ) {
-			$aresult = explode( ' ', stristr( $this->_agent, 'mspie' ) );
-				$this->setPlatform( $this->PLATFORM_WINDOWS_CE );
-			$this->setBrowser( $this->BROWSER_POCKET_IE );
-			$this->setMobile( true );
-
-			if ( stripos( $this->_agent, 'mspie' ) !== false ) {
-				$this->setVersion( $aresult[1] );
-			} else {
-				$aversion = explode( '/', $this->_agent );
-				$this->setVersion( $aversion[1] );
-			}
-			return true;
-		}
-		return false;
-	}
-
-	/**
-	 * Determine if the browser is Opera or not (last updated 1.7)
-	 *
-	 * @return boolean True if the browser is Opera otherwise false
-	 */
-	function checkBrowserOpera() {
-		if ( stripos( $this->_agent, 'opera mini' ) !== false ) {
-			$resultant = stristr( $this->_agent, 'opera mini' );
-			if ( preg_match( '/\//', $resultant ) ) {
-				$aresult = explode( '/', $resultant );
-				$aversion = explode( ' ', $aresult[1] );
-				$this->setVersion( $aversion[0] );
-			} else {
-				$aversion = explode( ' ', stristr( $resultant, 'opera mini' ) );
-				$this->setVersion( $aversion[1] );
-			}
-			$this->_browser_name = $this->BROWSER_OPERA_MINI;
-			$this->setMobile( true );
-			return true;
-		} else if ( stripos( $this->_agent, 'opera' ) !== false ) {
-			$resultant = stristr( $this->_agent, 'opera' );
-			if ( preg_match( '/Version\/(10.*)$/', $resultant, $matches ) ) {
-				$this->setVersion( $matches[1] );
-			} else if ( preg_match( '/\//', $resultant ) ) {
-				$aresult = explode( '/', str_replace( "(", " ", $resultant ) );
-				$aversion = explode( ' ', $aresult[1] );
-				$this->setVersion( $aversion[0] );
-			} else {
-				$aversion = explode( ' ', stristr( $resultant, 'opera' ) );
-				$this->setVersion( isset( $aversion[1] )?$aversion[1]:"" );
-			}
-			$this->_browser_name = $this->BROWSER_OPERA;
-			return true;
-		}
-		return false;
-	}
-
-	/**
-	 * Determine if the browser is Chrome or not (last updated 1.7)
-	 *
-	 * @return boolean True if the browser is Chrome otherwise false
-	 */
-	function checkBrowserChrome() {
-		if ( stripos( $this->_agent, 'Chrome' ) !== false ) {
-			$aresult = explode( '/', stristr( $this->_agent, 'Chrome' ) );
-			$aversion = explode( ' ', $aresult[1] );
-			$this->setVersion( $aversion[0] );
-			$this->setBrowser( $this->BROWSER_CHROME );
-			return true;
-		}
-		return false;
-	}
-
-
-	/**
-	 * Determine if the browser is WebTv or not (last updated 1.7)
-	 *
-	 * @return boolean True if the browser is WebTv otherwise false
-	 */
-	function checkBrowserWebTv() {
-		if ( stripos( $this->_agent, 'webtv' ) !== false ) {
-			$aresult = explode( '/', stristr( $this->_agent, 'webtv' ) );
-			$aversion = explode( ' ', $aresult[1] );
-			$this->setVersion( $aversion[0] );
-			$this->setBrowser( $this->BROWSER_WEBTV );
-			return true;
-		}
-		return false;
-	}
-
-	/**
-	 * Determine if the browser is NetPositive or not (last updated 1.7)
-	 *
-	 * @return boolean True if the browser is NetPositive otherwise false
-	 */
-	function checkBrowserNetPositive() {
-		if ( stripos( $this->_agent, 'NetPositive' ) !== false ) {
-			$aresult = explode( '/', stristr( $this->_agent, 'NetPositive' ) );
-			$aversion = explode( ' ', $aresult[1] );
-			$this->setVersion( str_replace( array( '(', ')', ';' ), '', $aversion[0] ) );
-			$this->setBrowser( $this->BROWSER_NETPOSITIVE );
-			return true;
-		}
-		return false;
-	}
-
-	/**
-	 * Determine if the browser is Galeon or not (last updated 1.7)
-	 *
-	 * @return boolean True if the browser is Galeon otherwise false
-	 */
-	function checkBrowserGaleon() {
-		if ( stripos( $this->_agent, 'galeon' ) !== false ) {
-			$aresult = explode( ' ', stristr( $this->_agent, 'galeon' ) );
-			$aversion = explode( '/', $aresult[0] );
-			$this->setVersion( $aversion[1] );
-			$this->setBrowser( $this->BROWSER_GALEON );
-			return true;
-		}
-		return false;
-	}
-
-	/**
-	 * Determine if the browser is Konqueror or not (last updated 1.7)
-	 *
-	 * @return boolean True if the browser is Konqueror otherwise false
-	 */
-	function checkBrowserKonqueror() {
-		if ( stripos( $this->_agent, 'Konqueror' ) !== false ) {
-			$aresult = explode( ' ', stristr( $this->_agent, 'Konqueror' ) );
-			$aversion = explode( '/', $aresult[0] );
-			$this->setVersion( $aversion[1] );
-			$this->setBrowser( $this->BROWSER_KONQUEROR );
-			return true;
-		}
-		return false;
-	}
-
-	/**
-	 * Determine if the browser is iCab or not (last updated 1.7)
-	 *
-	 * @return boolean True if the browser is iCab otherwise false
-	 */
-	function checkBrowserIcab() {
-		if ( stripos( $this->_agent, 'icab' ) !== false ) {
-			$aversion = explode( ' ', stristr( str_replace( '/', ' ', $this->_agent ), 'icab' ) );
-			$this->setVersion( $aversion[1] );
-			$this->setBrowser( $this->BROWSER_ICAB );
-			return true;
-		}
-		return false;
-	}
-
-	/**
-	 * Determine if the browser is OmniWeb or not (last updated 1.7)
-	 *
-	 * @return boolean True if the browser is OmniWeb otherwise false
-	 */
-	function checkBrowserOmniWeb() {
-		if ( stripos( $this->_agent, 'omniweb' ) !== false ) {
-			$aresult = explode( '/', stristr( $this->_agent, 'omniweb' ) );
-			$aversion = explode( ' ', isset( $aresult[1] )?$aresult[1]:"" );
-			$this->setVersion( $aversion[0] );
-			$this->setBrowser( $this->BROWSER_OMNIWEB );
-			return true;
-		}
-		return false;
-	}
-
-	/**
-	 * Determine if the browser is Phoenix or not (last updated 1.7)
-	 *
-	 * @return boolean True if the browser is Phoenix otherwise false
-	 */
-	function checkBrowserPhoenix() {
-		if ( stripos( $this->_agent, 'Phoenix' ) !== false ) {
-			$aversion = explode( '/', stristr( $this->_agent, 'Phoenix' ) );
-			$this->setVersion( $aversion[1] );
-			$this->setBrowser( $this->BROWSER_PHOENIX );
-			return true;
-		}
-		return false;
-	}
-
-	/**
-	 * Determine if the browser is Firebird or not (last updated 1.7)
-	 *
-	 * @return boolean True if the browser is Firebird otherwise false
-	 */
-	function checkBrowserFirebird() {
-		if ( stripos( $this->_agent, 'Firebird' ) !== false ) {
-			$aversion = explode( '/', stristr( $this->_agent, 'Firebird' ) );
-			$this->setVersion( $aversion[1] );
-			$this->setBrowser( $this->BROWSER_FIREBIRD );
-			return true;
-		}
-		return false;
-	}
-
-	/**
-	 * Determine if the browser is Netscape Navigator 9+ or not (last updated 1.7)
-	 * NOTE: (http://browser.netscape.com/ - Official support ended on March 1st, 2008)
-	 *
-	 * @return boolean True if the browser is Netscape Navigator 9+ otherwise false
-	 */
-	function checkBrowserNetscapeNavigator9Plus() {
-		if ( stripos( $this->_agent, 'Firefox' ) !== false && preg_match( '/Navigator\/([^ ]*)/i', $this->_agent, $matches ) ) {
-			$this->setVersion( $matches[1] );
-			$this->setBrowser( $this->BROWSER_NETSCAPE_NAVIGATOR );
-			return true;
-		} else if ( stripos( $this->_agent, 'Firefox' ) === false && preg_match( '/Netscape6?\/([^ ]*)/i', $this->_agent, $matches ) ) {
-			$this->setVersion( $matches[1] );
-			$this->setBrowser( $this->BROWSER_NETSCAPE_NAVIGATOR );
-			return true;
-		}
-		return false;
-	}
-
-	/**
-	 * Determine if the browser is Shiretoko or not (https://wiki.mozilla.org/Projects/shiretoko) (last updated 1.7)
-	 *
-	 * @return boolean True if the browser is Shiretoko otherwise false
-	 */
-	function checkBrowserShiretoko() {
-		if ( stripos( $this->_agent, 'Mozilla' ) !== false && preg_match( '/Shiretoko\/([^ ]*)/i', $this->_agent, $matches ) ) {
-			$this->setVersion( $matches[1] );
-			$this->setBrowser( $this->BROWSER_SHIRETOKO );
-			return true;
-		}
-		return false;
-	}
-
-	/**
-	 * Determine if the browser is Ice Cat or not (http://en.wikipedia.org/wiki/GNU_IceCat) (last updated 1.7)
-	 *
-	 * @return boolean True if the browser is Ice Cat otherwise false
-	 */
-	function checkBrowserIceCat() {
-		if ( stripos( $this->_agent, 'Mozilla' ) !== false && preg_match( '/IceCat\/([^ ]*)/i', $this->_agent, $matches ) ) {
-			$this->setVersion( $matches[1] );
-			$this->setBrowser( $this->BROWSER_ICECAT );
-			return true;
-		}
-		return false;
-	}
-
-	/**
-	 * Determine if the browser is Nokia or not (last updated 1.7)
-	 *
-	 * @return boolean True if the browser is Nokia otherwise false
-	 */
-	function checkBrowserNokia() {
-		if ( preg_match( "/Nokia([^\/]+)\/([^ SP]+)/i", $this->_agent, $matches ) ) {
-			$this->setVersion( $matches[2] );
-			if ( stripos( $this->_agent, 'Series60' ) !== false || strpos( $this->_agent, 'S60' ) !== false ) {
-				$this->setBrowser( $this->BROWSER_NOKIA_S60 );
-			} else {
-				$this->setBrowser( $this->BROWSER_NOKIA );
-			}
-			$this->setMobile( true );
-			return true;
-		}
-		return false;
-	}
-
-	/**
-	 * Determine if the browser is Firefox or not (last updated 1.7)
-	 *
-	 * @return boolean True if the browser is Firefox otherwise false
-	 */
-	function checkBrowserFirefox() {
-		if ( stripos( $this->_agent, 'safari' ) === false ) {
-			if ( preg_match( "/Firefox[\/ \(]([^ ;\)]+)/i", $this->_agent, $matches ) ) {
-				$this->setVersion( $matches[1] );
-				$this->setBrowser( $this->BROWSER_FIREFOX );
-				return true;
-			} else if ( preg_match( "/Firefox$/i", $this->_agent, $matches ) ) {
-				$this->setVersion( "" );
-				$this->setBrowser( $this->BROWSER_FIREFOX );
-				return true;
-			}
-		}
-		return false;
-	}
-
-	/**
-	 * Determine if the browser is Firefox or not (last updated 1.7)
-	 *
-	 * @return boolean True if the browser is Firefox otherwise false
-	 */
-	function checkBrowserIceweasel() {
-		if ( stripos( $this->_agent, 'Iceweasel' ) !== false ) {
-			$aresult = explode( '/', stristr( $this->_agent, 'Iceweasel' ) );
-			$aversion = explode( ' ', $aresult[1] );
-			$this->setVersion( $aversion[0] );
-			$this->setBrowser( $this->BROWSER_ICEWEASEL );
-			return true;
-		}
-		return false;
-	}
-	/**
-	 * Determine if the browser is Mozilla or not (last updated 1.7)
-	 *
-	 * @return boolean True if the browser is Mozilla otherwise false
-	 */
-	function checkBrowserMozilla() {
-		if ( stripos( $this->_agent, 'mozilla' ) !== false  && preg_match( '/rv:[0-9].[0-9][a-b]?/i', $this->_agent ) && stripos( $this->_agent, 'netscape' ) === false ) {
-			$aversion = explode( ' ', stristr( $this->_agent, 'rv:' ) );
-			preg_match( '/rv:[0-9].[0-9][a-b]?/i', $this->_agent, $aversion );
-			$this->setVersion( str_replace( 'rv:', '', $aversion[0] ) );
-			$this->setBrowser( $this->BROWSER_MOZILLA );
-			return true;
-		} else if ( stripos( $this->_agent, 'mozilla' ) !== false && preg_match( '/rv:[0-9]\.[0-9]/i', $this->_agent ) && stripos( $this->_agent, 'netscape' ) === false ) {
-			$aversion = explode( '', stristr( $this->_agent, 'rv:' ) );
-			$this->setVersion( str_replace( 'rv:', '', $aversion[0] ) );
-			$this->setBrowser( $this->BROWSER_MOZILLA );
-			return true;
-		} else if ( stripos( $this->_agent, 'mozilla' ) !== false  && preg_match( '/mozilla\/([^ ]*)/i', $this->_agent, $matches ) && stripos( $this->_agent, 'netscape' ) === false ) {
-			$this->setVersion( $matches[1] );
-			$this->setBrowser( $this->BROWSER_MOZILLA );
-			return true;
-		}
-		return false;
-	}
-
-	/**
-	 * Determine if the browser is Lynx or not (last updated 1.7)
-	 *
-	 * @return boolean True if the browser is Lynx otherwise false
-	 */
-	function checkBrowserLynx() {
-		if ( stripos( $this->_agent, 'lynx' ) !== false ) {
-			$aresult = explode( '/', stristr( $this->_agent, 'Lynx' ) );
-			$aversion = explode( ' ', ( isset( $aresult[1] )?$aresult[1]:"" ) );
-			$this->setVersion( $aversion[0] );
-			$this->setBrowser( $this->BROWSER_LYNX );
-			return true;
-		}
-		return false;
-	}
-
-	/**
-	 * Determine if the browser is Amaya or not (last updated 1.7)
-	 *
-	 * @return boolean True if the browser is Amaya otherwise false
-	 */
-	function checkBrowserAmaya() {
-		if ( stripos( $this->_agent, 'amaya' ) !== false ) {
-			$aresult = explode( '/', stristr( $this->_agent, 'Amaya' ) );
-			$aversion = explode( ' ', $aresult[1] );
-			$this->setVersion( $aversion[0] );
-			$this->setBrowser( $this->BROWSER_AMAYA );
-			return true;
-		}
-		return false;
-	}
-
-	/**
-	 * Determine if the browser is Safari or not (last updated 1.7)
-	 *
-	 * @return boolean True if the browser is Safari otherwise false
-	 */
-	function checkBrowserSafari() {
-		if ( stripos( $this->_agent, 'Safari' ) !== false && stripos( $this->_agent, 'iPhone' ) === false && stripos( $this->_agent, 'iPod' ) === false ) {
-			$aresult = explode( '/', stristr( $this->_agent, 'Version' ) );
-			if ( isset( $aresult[1] ) ) {
-				$aversion = explode( ' ', $aresult[1] );
-				$this->setVersion( $aversion[0] );
-			} else {
-				$this->setVersion( $this->VERSION_UNKNOWN );
-			}
-			$this->setBrowser( $this->BROWSER_SAFARI );
-			return true;
-		}
-		return false;
-	}
-
-	/**
-	 * Determine if the browser is iPhone or not (last updated 1.7)
-	 *
-	 * @return boolean True if the browser is iPhone otherwise false
-	 */
-	function checkBrowseriPhone() {
-		if ( stripos( $this->_agent, 'iPhone' ) !== false ) {
-			$aresult = explode( '/', stristr( $this->_agent, 'Version' ) );
-			if ( isset( $aresult[1] ) ) {
-				$aversion = explode( ' ', $aresult[1] );
-				$this->setVersion( $aversion[0] );
-			} else {
-				$this->setVersion( $this->VERSION_UNKNOWN );
-			}
-			$this->setMobile( true );
-			$this->setBrowser( $this->BROWSER_IPHONE );
-			return true;
-		}
-		return false;
-	}
-
-	/**
-	 * Determine if the browser is iPod or not (last updated 1.7)
-	 *
-	 * @return boolean True if the browser is iPod otherwise false
-	 */
-	function checkBrowseriPad() {
-		if ( stripos( $this->_agent, 'iPad' ) !== false ) {
-			$aresult = explode( '/', stristr( $this->_agent, 'Version' ) );
-			if ( isset( $aresult[1] ) ) {
-				$aversion = explode( ' ', $aresult[1] );
-				$this->setVersion( $aversion[0] );
-			} else {
-				$this->setVersion( $this->VERSION_UNKNOWN );
-			}
-			$this->setMobile( true );
-			$this->setBrowser( $this->BROWSER_IPAD );
-			return true;
-		}
-		return false;
-	}
-
-	/**
-	 * Determine if the browser is iPod or not (last updated 1.7)
-	 *
-	 * @return boolean True if the browser is iPod otherwise false
-	 */
-	function checkBrowseriPod() {
-		if ( stripos( $this->_agent, 'iPod' ) !== false ) {
-			$aresult = explode( '/', stristr( $this->_agent, 'Version' ) );
-			if ( isset( $aresult[1] ) ) {
-				$aversion = explode( ' ', $aresult[1] );
-				$this->setVersion( $aversion[0] );
-			} else {
-				$this->setVersion( $this->VERSION_UNKNOWN );
-			}
-			$this->setMobile( true );
-			$this->setBrowser( $this->BROWSER_IPOD );
-			return true;
-		}
-		return false;
-	}
-
-	/**
-	 * Determine if the browser is Android or not (last updated 1.7)
-	 *
-	 * @return boolean True if the browser is Android otherwise false
-	 */
-	function checkBrowserAndroid() {
-		if ( stripos( $this->_agent, 'Android' ) !== false ) {
-			$aresult = explode( ' ', stristr( $this->_agent, 'Android' ) );
-			if ( isset( $aresult[1] ) ) {
-				$aversion = explode( ' ', $aresult[1] );
-				$this->setVersion( $aversion[0] );
-			} else {
-				$this->setVersion( $this->VERSION_UNKNOWN );
-			}
-			$this->setMobile( true );
-			$this->setBrowser( $this->BROWSER_ANDROID );
-			return true;
-		}
-		return false;
-	}
-
-	/**
-	 * Determine the user's platform (last updated 1.7)
-	 */
-	function checkPlatform() {
-		if ( stripos( $this->_agent, 'windows' ) !== false ) {
-			$this->_platform = $this->PLATFORM_WINDOWS;
-		} else if ( stripos( $this->_agent, 'iPad' ) !== false ) {
-			$this->_platform = $this->PLATFORM_IPAD;
-		} else if ( stripos( $this->_agent, 'iPod' ) !== false ) {
-			$this->_platform = $this->PLATFORM_IPOD;
-		} else if ( stripos( $this->_agent, 'iPhone' ) !== false ) {
-			$this->_platform = $this->PLATFORM_IPHONE;
-		} elseif ( stripos( $this->_agent, 'mac' ) !== false ) {
-			$this->_platform = $this->PLATFORM_APPLE;
-		} elseif ( stripos( $this->_agent, 'android' ) !== false ) {
-			$this->_platform = $this->PLATFORM_ANDROID;
-		} elseif ( stripos( $this->_agent, 'linux' ) !== false ) {
-			$this->_platform = $this->PLATFORM_LINUX;
-		} else if ( stripos( $this->_agent, 'Nokia' ) !== false ) {
-			$this->_platform = $this->PLATFORM_NOKIA;
-		} else if ( stripos( $this->_agent, 'BlackBerry' ) !== false ) {
-			$this->_platform = $this->PLATFORM_BLACKBERRY;
-		} elseif ( stripos( $this->_agent, 'FreeBSD' ) !== false ) {
-			$this->_platform = $this->PLATFORM_FREEBSD;
-		} elseif ( stripos( $this->_agent, 'OpenBSD' ) !== false ) {
-			$this->_platform = $this->PLATFORM_OPENBSD;
-		} elseif ( stripos( $this->_agent, 'NetBSD' ) !== false ) {
-			$this->_platform = $this->PLATFORM_NETBSD;
-		} elseif ( stripos( $this->_agent, 'OpenSolaris' ) !== false ) {
-			$this->_platform = $this->PLATFORM_OPENSOLARIS;
-		} elseif ( stripos( $this->_agent, 'SunOS' ) !== false ) {
-			$this->_platform = $this->PLATFORM_SUNOS;
-		} elseif ( stripos( $this->_agent, 'OS\/2' ) !== false ) {
-			$this->_platform = $this->PLATFORM_OS2;
-		} elseif ( stripos( $this->_agent, 'BeOS' ) !== false ) {
-			$this->_platform = $this->PLATFORM_BEOS;
-		} elseif ( stripos( $this->_agent, 'win' ) !== false ) {
-			$this->_platform = $this->PLATFORM_WINDOWS;
-		}
-
-	}
-}
diff --git a/classes/wpdesk/settings-api/modules/sysinfo/class.s214-sysinfo.php b/classes/wpdesk/settings-api/modules/sysinfo/class.s214-sysinfo.php
deleted file mode 100644
index 6f6e5153d7b8ad899306ad2feca27022c0c5aaa3..0000000000000000000000000000000000000000
--- a/classes/wpdesk/settings-api/modules/sysinfo/class.s214-sysinfo.php
+++ /dev/null
@@ -1,442 +0,0 @@
-<?php
-/**
- * System Info handler for Section214
- *
- * @package     S214\Sysinfo
- * @since       1.1.0
- */
-
-// Exit if accessed directly
-if( ! defined( 'ABSPATH' ) ) {
-	exit;
-}
-
-
-/**
- * Section214 system info handler class
- *
- * @since       1.1.0
- */
-class S214_Sysinfo {
-
-
-	/**
-	 * @var         string $slug The plugin slug
-	 * @since       1.1.0
-	 */
-	private $slug;
-
-
-	/**
-	 * @var         string $func The plugin slug for names
-	 * @since       1.1.0
-	 */
-	private $func;
-
-
-	/**
-	 * @var         string $ver The library version
-	 * @since       1.1.0
-	 */
-	private $version;
-
-
-	/**
-	 * Class constructor
-	 *
-	 * @access      public
-	 * @since       1.1.0
-	 * @param       string $_slug
-	 * @param       string $_func
-	 * @return      void
-	 */
-	public function __construct( $_slug, $_func, $_version ) {
-		$this->slug    = $_slug;
-		$this->func    = $_func;
-		$this->version = $_version;
-
-		// Run action and filter hooks
-		$this->hooks();
-	}
-
-
-	/**
-	 * Run action and filter hooks
-	 *
-	 * @access      private
-	 * @since       1.1.0
-	 * @return      void
-	 */
-	private function hooks() {
-		// Process sysinfo download
-		add_action( $this->func . '_settings_download_system_info', array( $this,  'download_system_info' ) );
-	}
-
-
-	/**
-	 * Get system info
-	 *
-	 * @access      public
-	 * @since       1.1.0
-	 * @global      object $wpdb The WordPress database object
-	 * @return      string $return The system info to display
-	 */
-	public function get_system_info() {
-		global $wpdb;
-
-		if( ! class_exists( 'Browser' ) ) {
-			require_once 'browser.php';
-		}
-
-		$browser = new Browser();
-
-		// Get theme info
-		if( get_bloginfo( 'version' ) < '3.4' ) {
-			$theme_data = get_theme_data( get_stylesheet_directory() . '/style.css' );
-			$theme      = $theme_data['Name'] . ' ' . $theme_data['Version'];
-		} else {
-			$theme_data = wp_get_theme();
-			$theme      = $theme_data->Name . ' ' . $theme_data->Version;
-		}
-
-		// Try to identify the hosting provider
-		$host = $this->get_host();
-
-		$return  = '### Begin System Info ###' . "\n\n";
-
-		// Start with the basics...
-		$return .= '-- Site Info' . "\n\n";
-		$return .= 'Site URL:                 ' . site_url() . "\n";
-		$return .= 'Home URL:                 ' . home_url() . "\n";
-		$return .= 'Multisite:                ' . ( is_multisite() ? 'Yes' : 'No' ) . "\n";
-
-		$return  = apply_filters( $this->func . '_sysinfo_after_site_info', $return );
-
-		// Can we determine the site's host?
-		if( $host ) {
-			$return .= "\n" . '-- Hosting Provider' . "\n\n";
-			$return .= 'Host:                     ' . $host . "\n";
-
-			$return  = apply_filters( $this->func . '_sysinfo_after_host_info', $return );
-		}
-
-		// The local users' browser information, handled by the Browser class
-		$return .= "\n" . '-- User Browser' . "\n\n";
-		$return .= $browser;
-
-		$return  = apply_filters( $this->func . '_sysinfo_after_user_browser', $return );
-
-		// WordPress configuration
-		$return .= "\n" . '-- WordPress Configuration' . "\n\n";
-		$return .= 'Version:                  ' . get_bloginfo( 'version' ) . "\n";
-		$return .= 'Language:                 ' . ( defined( 'WPLANG' ) && WPLANG ? WPLANG : 'en_US' ) . "\n";
-		$return .= 'Permalink Structure:      ' . ( get_option( 'permalink_structure' ) ? get_option( 'permalink_structure' ) : 'Default' ) . "\n";
-		$return .= 'Active Theme:             ' . $theme . "\n";
-		$return .= 'Show On Front:            ' . get_option( 'show_on_front' ) . "\n";
-
-		// Only show page specs if frontpage is set to 'page'
-		if( get_option( 'show_on_front' ) == 'page' ) {
-			$front_page_id = get_option( 'page_on_front' );
-			$blog_page_id  = get_option( 'page_for_posts' );
-
-			$return .= 'Page On Front:            ' . ( $front_page_id != 0 ? get_the_title( $front_page_id ) . ' (#' . $front_page_id . ')' : 'Unset' ) . "\n";
-			$return .= 'Page For Posts:           ' . ( $blog_page_id != 0 ? get_the_title( $blog_page_id ) . ' (#' . $blog_page_id . ')' : 'Unset' ) . "\n";
-		}
-
-		// Make sure wp_remote_post() is working
-		$request['cmd'] = '_notify-validate';
-
-		$params = array(
-			'sslverify'  => false,
-			'timeout'    => 60,
-			'user-agent' => 'S214-Settings/' . $this->version,
-			'body'       => $request
-		);
-
-		$response = wp_remote_post( 'https://www.paypal.com/cgi-bin/webscr', $params );
-
-		if( ! is_wp_error( $response ) && $response['response']['code'] >= 200 && $response['response']['code'] < 300 ) {
-			$WP_REMOTE_POST = 'wp_remote_post() works';
-		} else {
-			$WP_REMOTE_POST = 'wp_remote_post() does not work';
-		}
-
-		$return .= 'Remote Post:              ' . $WP_REMOTE_POST . "\n";
-		$return .= 'Table Prefix:             ' . 'Length: ' . strlen( $wpdb->prefix ) . '   Status: ' . ( strlen( $wpdb->prefix ) > 16 ? 'ERROR: Too long' : 'Acceptable' ) . "\n";
-		$return .= 'WP_DEBUG:                 ' . ( defined( 'WP_DEBUG' ) ? WP_DEBUG ? 'Enabled' : 'Disabled' : 'Not set' ) . "\n";
-		$return .= 'Memory Limit:             ' . WP_MEMORY_LIMIT . "\n";
-		$return .= 'Registered Post Stati:    ' . implode( ', ', get_post_stati() ) . "\n";
-
-		$return  = apply_filters( $this->func . '_sysinfo_after_wordpress_config', $return );
-
-		// Get plugins that have an update
-		$updates = get_plugin_updates();
-
-		// Must-use plugins
-		// NOTE: MU plugins can't show updates!
-		$muplugins = get_mu_plugins();
-		if( count( $muplugins > 0 ) ) {
-			$return .= "\n" . '-- Must-Use Plugins' . "\n\n";
-
-			foreach( $muplugins as $plugin => $plugin_data ) {
-				$return .= $plugin_data['Name'] . ': ' . $plugin_data['Version'] . "\n";
-			}
-
-			$return = apply_filters( $this->func . '_sysinfo_after_wordpress_mu_plugins', $return );
-		}
-
-		// WordPress active plugins
-		$return .= "\n" . '-- WordPress Active Plugins' . "\n\n";
-
-		$plugins = get_plugins();
-		$active_plugins = get_option( 'active_plugins', array() );
-
-		foreach( $plugins as $plugin_path => $plugin ) {
-			if( ! in_array( $plugin_path, $active_plugins ) ) {
-				continue;
-			}
-
-			$update = ( array_key_exists( $plugin_path, $updates ) ) ? ' (needs update - ' . $updates[$plugin_path]->update->new_version . ')' : '';
-			$return .= $plugin['Name'] . ': ' . $plugin['Version'] . $update . "\n";
-		}
-
-		$return  = apply_filters( $this->func . '_sysinfo_after_wordpress_plugins', $return );
-
-		// WordPress inactive plugins
-		$return .= "\n" . '-- WordPress Inactive Plugins' . "\n\n";
-
-		foreach( $plugins as $plugin_path => $plugin ) {
-			if( in_array( $plugin_path, $active_plugins ) ) {
-				continue;
-			}
-
-			$update = ( array_key_exists( $plugin_path, $updates ) ) ? ' (needs update - ' . $updates[$plugin_path]->update->new_version . ')' : '';
-			$return .= $plugin['Name'] . ': ' . $plugin['Version'] . $update . "\n";
-		}
-
-		$return = apply_filters( $this->func . '_sysinfo_after_wordpress_plugins_inactive', $return );
-
-		if( is_multisite() ) {
-			// WordPress Multisite active plugins
-			$return .= "\n" . '-- Network Active Plugins' . "\n\n";
-
-			$plugins = wp_get_active_network_plugins();
-			$active_plugins = get_site_option( 'active_sitewide_plugins', array() );
-
-			foreach( $plugins as $plugin_path ) {
-				$plugin_base = plugin_basename( $plugin_path );
-
-				if( ! array_key_exists( $plugin_base, $active_plugins ) ) {
-					continue;
-				}
-
-				$update  = ( array_key_exists( $plugin_path, $updates ) ) ? ' (needs update - ' . $updates[$plugin_path]->update->new_version . ')' : '';
-				$plugin  = get_plugin_data( $plugin_path );
-				$return .= $plugin['Name'] . ': ' . $plugin['Version'] . $update . "\n";
-			}
-
-			$return = apply_filters( $this->func . '_sysinfo_after_wordpress_ms_plugins', $return );
-		}
-
-		// Server configuration (really just versioning)
-		$return .= "\n" . '-- Webserver Configuration' . "\n\n";
-		$return .= 'PHP Version:              ' . PHP_VERSION . "\n";
-		$return .= 'MySQL Version:            ' . $wpdb->db_version() . "\n";
-		$return .= 'Webserver Info:           ' . $_SERVER['SERVER_SOFTWARE'] . "\n";
-
-		$return  = apply_filters( $this->func . '_sysinfo_after_webserver_config', $return );
-
-		// PHP configs... now we're getting to the important stuff
-		$return .= "\n" . '-- PHP Configuration' . "\n\n";
-		$return .= 'Safe Mode:                ' . ( ini_get( 'safe_mode' ) ? 'Enabled' : 'Disabled' . "\n" );
-		$return .= 'Memory Limit:             ' . ini_get( 'memory_limit' ) . "\n";
-		$return .= 'Upload Max Size:          ' . ini_get( 'upload_max_filesize' ) . "\n";
-		$return .= 'Post Max Size:            ' . ini_get( 'post_max_size' ) . "\n";
-		$return .= 'Upload Max Filesize:      ' . ini_get( 'upload_max_filesize' ) . "\n";
-		$return .= 'Time Limit:               ' . ini_get( 'max_execution_time' ) . "\n";
-		$return .= 'Max Input Vars:           ' . ini_get( 'max_input_vars' ) . "\n";
-		$return .= 'Display Errors:           ' . ( ini_get( 'display_errors' ) ? 'On (' . ini_get( 'display_errors' ) . ')' : 'N/A' ) . "\n";
-
-		$return  = apply_filters( $this->func . '_sysinfo_after_php_config', $return );
-
-		// PHP extensions and such
-		$return .= "\n" . '-- PHP Extensions' . "\n\n";
-		$return .= 'cURL:                     ' . ( function_exists( 'curl_init' ) ? 'Supported' : 'Not Supported' ) . "\n";
-		$return .= 'fsockopen:                ' . ( function_exists( 'fsockopen' ) ? 'Supported' : 'Not Supported' ) . "\n";
-		$return .= 'SOAP Client:              ' . ( class_exists( 'SoapClient' ) ? 'Installed' : 'Not Installed' ) . "\n";
-		$return .= 'Suhosin:                  ' . ( extension_loaded( 'suhosin' ) ? 'Installed' : 'Not Installed' ) . "\n";
-
-		$return  = apply_filters( $this->func . '_sysinfo_after_php_ext', $return );
-
-		$return .= "\n" . '### End System Info ###';
-
-		return $return;
-	}
-
-
-	/**
-	 * Generates a System Info download file
-	 *
-	 * @param       public
-	 * @since       1.1.0
-	 * @return      void
-	 */
-	public function download_system_info() {
-		nocache_headers();
-
-		header( 'Content-Type: text/plain' );
-		header( 'Content-Disposition: attachment; filename="' . $this->slug . '-system-info.txt"' );
-
-		echo wp_strip_all_tags( $this->get_system_info() );
-		die();
-	}
-
-
-	/**
-	 * Get AJAX URL
-	 *
-	 * @access      public
-	 * @since       1.1.0
-	 * @return      string URL to the AJAX file to call during AJAX requests.
-	 */
-	function get_ajax_url() {
-		$scheme = defined( 'FORCE_SSL_ADMIN' ) && FORCE_SSL_ADMIN ? 'https' : 'admin';
-
-		$current_url = $this->get_current_page_url();
-		$ajax_url    = admin_url( 'admin-ajax.php', $scheme );
-
-		if( preg_match( '/^https/', $current_url ) && ! preg_match( '/^https/', $ajax_url ) ) {
-			$ajax_url = preg_replace( '/^http/', 'https', $ajax_url );
-		}
-
-		return apply_filters( $this->func . '_ajax_url', $ajax_url );
-	}
-
-
-	/**
-	 * Get the current page URL
-	 *
-	 * @access      public
-	 * @since       1.1.0
-	 * @param       bool $nocache If we should bust cache on the returned URL
-	 * @return      string $page_url Current page URL
-	 */
-	function get_current_page_url( $nocache = false ) {
-		global $wp;
-
-		if( get_option( 'permalink_structure' ) ) {
-			$base = trailingslashit( home_url( $wp->request ) );
-		} else {
-			$base = add_query_arg( $wp->query_string, '', trailingslashit( home_url( $wp->request ) ) );
-			$base = remove_query_arg( array( 'post_type', 'name' ), $base );
-		}
-
-		$scheme = is_ssl() ? 'https' : 'http';
-		$uri    = set_url_scheme( $base, $scheme );
-
-		if( is_front_page() ) {
-			$uri = home_url( '/' );
-		}
-
-		$uri = apply_filters( $this->func . '_get_current_page_url', $uri );
-
-		if ( $nocache ) {
-			$uri = $this->add_cache_busting( $uri );
-		}
-
-		return $uri;
-	}
-
-
-	/**
-	 * Adds the 'nocache' parameter to the provided URL
-	 *
-	 * @access      public
-	 * @since       1.1.0
-	 * @param       string $url The URL being requested
-	 * @return      string The URL with cache busting added or not
-	 */
-	function add_cache_busting( $url = '' ) {
-		if( $this->is_caching_plugin_active() ) {
-			$url = add_query_arg( 'nocache', 'true', $url );
-		}
-
-		return $url;
-	}
-
-
-	/**
-	 * Checks if a caching plugin is active
-	 *
-	 * @access      public
-	 * @since       1.1.0
-	 * @return      bool $caching True if caching plugin is enabled, false otherwise
-	 */
-	function is_caching_plugin_active() {
-		$caching = ( function_exists( 'wpsupercache_site_admin' ) || defined( 'W3TC' ) || function_exists( 'rocket_init' ) );
-		return apply_filters( $this->func . '_is_caching_plugin_active', $caching );
-	}
-
-
-	/**
-	 * Get user host
-	 *
-	 * @access      public
-	 * @since       1.1.0
-	 * @return      mixed string $host if detected, fallback data otherwise
-	 */
-	function get_host() {
-		if( defined( 'WPE_APIKEY' ) ) {
-			$host = 'WP Engine';
-		} elseif( defined( 'PAGELYBIN' ) ) {
-			$host = 'Pagely';
-		} elseif( DB_HOST == 'localhost:/tmp/mysql5.sock' ) {
-			$host = 'ICDSoft';
-		} elseif( DB_HOST == 'mysqlv5' ) {
-			$host = 'NetworkSolutions';
-		} elseif( strpos( DB_HOST, 'ipagemysql.com' ) !== false ) {
-			$host = 'iPage';
-		} elseif( strpos( DB_HOST, 'ipowermysql.com' ) !== false ) {
-			$host = 'IPower';
-		} elseif( strpos( DB_HOST, '.gridserver.com' ) !== false ) {
-			$host = 'MediaTemple Grid';
-		} elseif( strpos( DB_HOST, '.pair.com' ) !== false ) {
-			$host = 'pair Networks';
-		} elseif( strpos( DB_HOST, '.stabletransit.com' ) !== false ) {
-			$host = 'Rackspace Cloud';
-		} elseif( strpos( DB_HOST, '.sysfix.eu' ) !== false ) {
-			$host = 'SysFix.eu Power Hosting';
-		} elseif( strpos( $_SERVER['SERVER_NAME'], 'Flywheel' ) !== false ) {
-			$host = 'Flywheel';
-		} else {
-			// Adding a general fallback for data gathering
-			$host = 'DBH: ' . DB_HOST . ', SRV: ' . $_SERVER['SERVER_NAME'];
-		}
-
-		return $host;
-	}
-
-
-	/**
-	 * Get user IP
-	 *
-	 * @access      public
-	 * @since       1.1.0
-	 * @return      string $ip User's IP address
-	 */
-	function get_ip() {
-		$ip = '127.0.0.1';
-
-		if( ! empty( $_SERVER['HTTP_CLIENT_IP'] ) ) {
-			// Check if IP is from share internet
-			$ip = $_SERVER['HTTP_CLIENT_IP'];
-		} elseif( ! empty( $_SERVER['HTTP_X_FORWARDED_FOR'] ) ) {
-			// Check if IP is passed from proxy
-			$ip = $_SERVER['HTTP_X_FORWARDED_FOR'];
-		} elseif( ! empty( $_SERVER['REMOTE_ADDR'] ) ) {
-			$ip = $_SERVER['REMOTE_ADDR'];
-		}
-
-		return apply_filters( $this->func . '_get_ip', $ip );
-	}
-}
diff --git a/composer.json b/composer.json
index 86e222439b2bb470c69c8d000ad98023056ce58d..4441e4faa2f07837a7f6a2d82ca0df09daf93478 100644
--- a/composer.json
+++ b/composer.json
@@ -6,8 +6,19 @@
             "email": "krzysiek@wpdesk.pl"
         }
     ],
+    "autoload": {
+        "classmap": ["legacy"],
+        "psr-4": {
+            "WPDesk\\PluginTemplate\\": "src/"
+        }
+    },
+    "config": {
+        "sort-packages": true
+    },
+    "prefer-stable": true,
     "require": {
-        "php": ">=5.5"
+        "php": ">=5.6",
+        "wpdesk/wp-plugin-flow": "^1.5"
     },
     "require-dev": {
         "phpunit/phpunit": "<7",
@@ -15,7 +26,7 @@
         "squizlabs/php_codesniffer": "^3.0.2",
         "mockery/mockery": "*",
         "10up/wp_mock": "*",
-        "wimg/php-compatibility": "^8"
+        "phpcompatibility/php-compatibility": "^9.1"
     },
     "autoload-dev": {
     },
@@ -23,14 +34,7 @@
         "test": "echo composer is alive",
         "phpcs": "phpcs",
         "phpunit-unit": "phpunit --configuration phpunit-unit.xml --coverage-text --colors=never",
-        "phpunit-unit-fast": "phpunit --configuration phpunit-unit.xml --no-coverage",
         "phpunit-integration": "phpunit --configuration phpunit-integration.xml --coverage-text --colors=never",
-        "phpunit-integration-fast": "phpunit --configuration phpunit-integration.xml --no-coverage",
-
-	    "docs": "apigen generate"
-    },
-    "config": {
-        "preferred-install": "dist",
-        "sort-packages": true
+        "docs": "apigen generate"
     }
 }
diff --git a/languages/plugin-template-pl_PL.mo b/languages/plugin-template-pl_PL.mo
deleted file mode 100644
index 81d5e67d2169951d5cf8fe01cba2ad35ab34ebc0..0000000000000000000000000000000000000000
Binary files a/languages/plugin-template-pl_PL.mo and /dev/null differ
diff --git a/languages/plugin-template-pl_PL.po b/languages/plugin-template-pl_PL.po
deleted file mode 100644
index f4711718f4c2df83517ad0d0bfad683e22d094e0..0000000000000000000000000000000000000000
--- a/languages/plugin-template-pl_PL.po
+++ /dev/null
@@ -1,523 +0,0 @@
-msgid ""
-msgstr ""
-"Project-Id-Version: Flexible Shipping PRO\n"
-"POT-Creation-Date: 2016-09-22 09:40+0100\n"
-"PO-Revision-Date: 2016-09-22 09:40+0100\n"
-"Last-Translator: wp-kat <admin@wp-kat.net>\n"
-"Language-Team: Maciej Swoboda <maciej.swoboda@gmail.com>\n"
-"Language: pl_PL\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"X-Generator: Poedit 1.5.7\n"
-"X-Poedit-Basepath: ..\n"
-"X-Poedit-WPHeader: flexible-shipping-pro.php\n"
-"Plural-Forms: nplurals=3; plural=(n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 "
-"|| n%100>=20) ? 1 : 2);\n"
-"X-Poedit-SourceCharset: UTF-8\n"
-"X-Poedit-KeywordsList: __;_e;_n:1,2;_x:1,2c;_ex:1,2c;_nx:4c,1,2;esc_attr__;"
-"esc_attr_e;esc_attr_x:1,2c;esc_html__;esc_html_e;esc_html_x:1,2c;_n_noop:1,2;"
-"_nx_noop:3c,1,2;__ngettext_noop:1,2\n"
-"X-Poedit-SearchPathExcluded-0: *.js\n"
-"X-Poedit-SearchPath-0: .\n"
-
-#: classes/class-plugin-template-settings-hooks.php:52
-msgid "WP Desk Plugin Template Settings"
-msgstr ""
-
-#: classes/class-plugin-template-settings-hooks.php:54
-msgid "Plugin template"
-msgstr ""
-
-#: classes/class-plugin-template-settings-hooks.php:64
-msgid "Welcome"
-msgstr ""
-
-#: classes/class-plugin-template-settings-hooks.php:65
-msgid "Fields"
-msgstr ""
-
-#: classes/class-plugin-template-settings-hooks.php:80
-#: classes/class-plugin-template-settings-hooks.php:107
-msgid "Welcome Aboard!"
-msgstr ""
-
-#: classes/class-plugin-template-settings-hooks.php:83
-msgid "Text Fields"
-msgstr ""
-
-#: classes/class-plugin-template-settings-hooks.php:84
-msgid "Option Fields"
-msgstr ""
-
-#: classes/class-plugin-template-settings-hooks.php:85
-msgid "Misc Fields"
-msgstr ""
-
-#: classes/class-plugin-template-settings-hooks.php:86
-msgid "Advanced Fields"
-msgstr ""
-
-#: classes/class-plugin-template-settings-hooks.php:93
-#, php-format
-msgid ""
-"The S214 Settings library is significantly inspired by and based on the "
-"awesome word done by %s and the team from %s, so we owe them a <strong>huge</"
-"strong> thank you!"
-msgstr ""
-
-#: classes/class-plugin-template-settings-hooks.php:95
-#, php-format
-msgid ""
-"By the way, even though this <em>looks</em> like a %s field, it's actually "
-"an example of a 'hook' field. It is created by attaching an action to the "
-"hook %s (in our case, %s)."
-msgstr ""
-
-#: classes/class-plugin-template-settings-hooks.php:96
-#, php-format
-msgid ""
-"You'll also note that this tab doesn't have a save button. This is achieved "
-"by filtering %s, and adding the slug of the tab to the returned array."
-msgstr ""
-
-#: classes/class-plugin-template-settings-hooks.php:114
-#, php-format
-msgid ""
-"This plugin will attempt to familiarize you with the various things this "
-"library is capable of. Just in case it wasn't obvious, the \"Welcome Aboard"
-"\" text above is an example of a %s field, and this field is a %s field. "
-"Remember, every field takes 'id', 'name', 'desc' and 'type' arguments!"
-msgstr ""
-
-#: classes/class-plugin-template-settings-hooks.php:116
-msgid "Hi There!"
-msgstr ""
-
-#: classes/class-plugin-template-settings-hooks.php:117
-msgid ""
-"Other than the 'header' and 'hook' field types, all fields can display a "
-"tooltip. Do this by adding 'tooltip_title' and 'tooltip_desc' arguments to "
-"the field array."
-msgstr ""
-
-#: classes/class-plugin-template-settings-hooks.php:121
-msgid "Thanks EDD!"
-msgstr ""
-
-#: classes/class-plugin-template-settings-hooks.php:131
-msgid "Text Field Examples"
-msgstr ""
-
-#: classes/class-plugin-template-settings-hooks.php:137
-#: classes/class-plugin-template-settings-hooks.php:144
-#: classes/class-plugin-template-settings-hooks.php:150
-#: classes/class-plugin-template-settings-hooks.php:156
-#: classes/class-plugin-template-settings-hooks.php:162
-#: classes/class-plugin-template-settings-hooks.php:176
-#: classes/class-plugin-template-settings-hooks.php:182
-#: classes/class-plugin-template-settings-hooks.php:193
-#: classes/class-plugin-template-settings-hooks.php:204
-#: classes/class-plugin-template-settings-hooks.php:223
-#: classes/class-plugin-template-settings-hooks.php:230
-#: classes/class-plugin-template-settings-hooks.php:237
-#: classes/class-plugin-template-settings-hooks.php:251
-#, php-format
-msgid "%s Field"
-msgstr ""
-
-#: classes/class-plugin-template-settings-hooks.php:138
-#, php-format
-msgid ""
-"Text fields can take 'std', 'readonly' and 'size' arguements. Read more "
-"about text fields %s."
-msgstr ""
-
-#: classes/class-plugin-template-settings-hooks.php:138
-#: classes/class-plugin-template-settings-hooks.php:145
-#: classes/class-plugin-template-settings-hooks.php:151
-#: classes/class-plugin-template-settings-hooks.php:157
-#: classes/class-plugin-template-settings-hooks.php:163
-#: classes/class-plugin-template-settings-hooks.php:177
-#: classes/class-plugin-template-settings-hooks.php:183
-#: classes/class-plugin-template-settings-hooks.php:194
-#: classes/class-plugin-template-settings-hooks.php:205
-#: classes/class-plugin-template-settings-hooks.php:224
-#: classes/class-plugin-template-settings-hooks.php:231
-#: classes/class-plugin-template-settings-hooks.php:238
-#: classes/class-plugin-template-settings-hooks.php:252
-msgid "here"
-msgstr ""
-
-#: classes/class-plugin-template-settings-hooks.php:145
-#, php-format
-msgid ""
-"Textarea fields can take a 'std' arguement. Read more about textarea fields "
-"%s."
-msgstr ""
-
-#: classes/class-plugin-template-settings-hooks.php:151
-#, php-format
-msgid ""
-"Editor fields can take 'std', 'allow_blank', 'size', 'wpautop', 'buttons' "
-"and 'teeny' arguements. Read more about editor fields %s."
-msgstr ""
-
-#: classes/class-plugin-template-settings-hooks.php:157
-#, php-format
-msgid "HTML fields can take a 'std' arguement. Read more about HTML fields %s."
-msgstr ""
-
-#: classes/class-plugin-template-settings-hooks.php:163
-#, php-format
-msgid ""
-"Password fields can take 'std' and 'size' arguements. Read more about "
-"password fields %s."
-msgstr ""
-
-#: classes/class-plugin-template-settings-hooks.php:170
-msgid "Option Field Examples"
-msgstr ""
-
-#: classes/class-plugin-template-settings-hooks.php:177
-#, php-format
-msgid ""
-"Checkbox fields only take the basic arguements. Read more about checkbox "
-"fields %s."
-msgstr ""
-
-#: classes/class-plugin-template-settings-hooks.php:183
-#, php-format
-msgid ""
-"Multicheck fields only take the basic arguements. Read more about multicheck "
-"fields %s."
-msgstr ""
-
-#: classes/class-plugin-template-settings-hooks.php:186
-#: classes/class-plugin-template-settings-hooks.php:197
-#: classes/class-plugin-template-settings-hooks.php:208
-msgid "Option 1"
-msgstr ""
-
-#: classes/class-plugin-template-settings-hooks.php:187
-#: classes/class-plugin-template-settings-hooks.php:198
-#: classes/class-plugin-template-settings-hooks.php:209
-msgid "Option 2"
-msgstr ""
-
-#: classes/class-plugin-template-settings-hooks.php:188
-#: classes/class-plugin-template-settings-hooks.php:199
-#: classes/class-plugin-template-settings-hooks.php:210
-msgid "Option 3"
-msgstr ""
-
-#: classes/class-plugin-template-settings-hooks.php:194
-#, php-format
-msgid ""
-"Radio fields can take a 'std' arguement. Read more about radio fields %s."
-msgstr ""
-
-#: classes/class-plugin-template-settings-hooks.php:205
-#, php-format
-msgid ""
-"Select fields can take 'std', 'placeholder', 'select2' and 'multiple' "
-"arguements. Read more about select fields %s."
-msgstr ""
-
-#: classes/class-plugin-template-settings-hooks.php:217
-msgid "Misc Field Examples"
-msgstr ""
-
-#: classes/class-plugin-template-settings-hooks.php:224
-#, php-format
-msgid ""
-"Color fields can take a 'std' arguement. Read more about color fields %s."
-msgstr ""
-
-#: classes/class-plugin-template-settings-hooks.php:231
-#, php-format
-msgid ""
-"Number fields can take 'std', 'max', 'min', 'step', 'size' and 'readonly' "
-"arguements. Read more about number fields %s."
-msgstr ""
-
-#: classes/class-plugin-template-settings-hooks.php:238
-#, php-format
-msgid ""
-"Upload fields can take 'std' and 'size' arguements. Read more about upload "
-"fields %s."
-msgstr ""
-
-#: classes/class-plugin-template-settings-hooks.php:245
-msgid "Advanced Field Examples"
-msgstr ""
-
-#: classes/class-plugin-template-settings-hooks.php:252
-#, php-format
-msgid ""
-"Sysinfo fields only take the basic arguements. Read more about sysinfo "
-"fields %s."
-msgstr ""
-
-#: classes/wpdesk/class-helper.php:36
-#, php-format
-msgid ""
-"The %s%s%s License Key has not been activated, so the plugin is inactive! "
-"%sClick here%s to activate the license key and the plugin."
-msgstr ""
-"Klucz licencyjny wtyczki %s%s%s nie został aktywowany, więc wtyczka jest "
-"nieaktywna! %sKliknij tutaj%s, aby aktywować klucz licencyjny wtyczki."
-
-#: classes/wpdesk/class-plugin.php:198
-msgid "Settings"
-msgstr "Ustawienia"
-
-#: classes/wpdesk/class-plugin.php:199
-msgid "Docs"
-msgstr "Docs"
-
-#: classes/wpdesk/class-plugin.php:200
-msgid "Support"
-msgstr "Wsparcie"
-
-#: classes/wpdesk/class-plugin.php:244
-#, php-format
-msgid ""
-"<a href=\"%s\">Install the WP Desk Helper plugin</a> to activate and get "
-"updates for your WP Desk plugins."
-msgstr ""
-"<a href=\"%s\">Zainstaluj wtyczkę WP Desk Helper</a>, aby aktywować i "
-"otrzymywać aktualizacje wtyczek WP Desk."
-
-#: classes/wpdesk/class-plugin.php:250
-#, php-format
-msgid ""
-"<a href=\"%s\">Activate the WP Desk Helper plugin</a> to activate and get "
-"updates for your WP Desk plugins."
-msgstr ""
-"<a href=\"%s\">Włącz wtyczkę WP Desk Helper</a>, aby aktywować i otrzymywać "
-"aktualizacje wtyczek WP Desk."
-
-#: classes/wpdesk/class-settings.php:70
-#: classes/wpdesk/settings-api/class.s214-settings.php:1210
-msgid "Insert Image"
-msgstr ""
-
-#: classes/wpdesk/class-settings.php:71
-#: classes/wpdesk/settings-api/class.s214-settings.php:1211
-msgid "Select Image"
-msgstr ""
-
-#: classes/wpdesk/settings-api/class.s214-settings.php:144
-#: classes/wpdesk/settings-api/class.s214-settings.php:146
-msgid "Section214 Settings"
-msgstr ""
-
-#: classes/wpdesk/settings-api/class.s214-settings.php:591
-msgid "Settings updated."
-msgstr "Ustawienia zostały zaktualizowane."
-
-#: classes/wpdesk/settings-api/class.s214-settings.php:976
-msgid ""
-"To copy the system info, click below then press Ctrl + C (PC) or Cmd + C "
-"(Mac)."
-msgstr ""
-
-#: classes/wpdesk/settings-api/class.s214-settings.php:979
-msgid "Download System Info File"
-msgstr ""
-
-#: classes/wpdesk/settings-api/class.s214-settings.php:1059
-msgid "Upload File"
-msgstr ""
-
-#: classes/wpdesk/settings-api/class.s214-settings.php:1089
-msgid "Deactivate License"
-msgstr ""
-
-#: classes/wpdesk/settings-api/class.s214-settings.php:1120
-#, php-format
-msgid ""
-"The callback function used for the <strong>%s</strong> setting is missing."
-msgstr ""
-
-#: classes/wpdesk/settings-api/modules/licensing/class.s214-license.php:141
-msgid "Licensing"
-msgstr ""
-
-#: classes/wpdesk/settings-api/modules/licensing/class.s214-license.php:159
-#, php-format
-msgid "%1$s License Key"
-msgstr ""
-
-#: classes/wpdesk/settings-api/modules/licensing/class.s214-license.php:160
-msgid "Please enter your license key to enable automatic updates and support."
-msgstr ""
-
-#: classes/wpdesk/settings-api/modules/licensing/class.s214-license.php:197
-#: classes/wpdesk/settings-api/modules/licensing/class.s214-license.php:270
-msgid "Nonce verification failed"
-msgstr ""
-
-#: classes/wpdesk/settings-api/modules/licensing/class.s214-license.php:197
-#: classes/wpdesk/settings-api/modules/licensing/class.s214-license.php:270
-#: classes/wpdesk/settings-api/modules/licensing/S214_Plugin_Updater.php:340
-msgid "Error"
-msgstr ""
-
-#: classes/wpdesk/settings-api/modules/licensing/class.s214-license.php:352
-msgid "This license does not belong to the product you have entered it for."
-msgstr ""
-
-#: classes/wpdesk/settings-api/modules/licensing/class.s214-license.php:357
-msgid "This license does not have any activations left"
-msgstr ""
-
-#: classes/wpdesk/settings-api/modules/licensing/class.s214-license.php:362
-msgid "This license key is expired. Please renew it."
-msgstr ""
-
-#: classes/wpdesk/settings-api/modules/licensing/class.s214-license.php:367
-#, php-format
-msgid ""
-"There was a problem activating your license key, please try again or contact "
-"support. Error code: %s"
-msgstr ""
-
-#: classes/wpdesk/settings-api/modules/licensing/S214_Plugin_Updater.php:188
-#, php-format
-msgid ""
-"There is a new version of %1$s available. %2$sView version %3$s details%4$s."
-msgstr ""
-
-#: classes/wpdesk/settings-api/modules/licensing/S214_Plugin_Updater.php:196
-#, php-format
-msgid ""
-"There is a new version of %1$s available. %2$sView version %3$s details%4$s "
-"or %5$supdate now%6$s."
-msgstr ""
-
-#: classes/wpdesk/settings-api/modules/licensing/S214_Plugin_Updater.php:340
-msgid "You do not have permission to install plugin updates"
-msgstr ""
-
-#~ msgid "Maximum cost"
-#~ msgstr "Maksymalny koszt"
-
-#~ msgid ""
-#~ "Set a maximum cost of shipping. This will override the costs configured "
-#~ "below."
-#~ msgstr ""
-#~ "Ustaw maksymalny koszt wysyłki. To nadpisze koszty ustawione w regułach."
-
-#~ msgid "Lowest cost"
-#~ msgstr "Najniższy koszt"
-
-#~ msgid "Highest cost"
-#~ msgstr "Najwyższy koszt"
-
-#~ msgid "Item"
-#~ msgstr "Sztuka"
-
-#~ msgid "Cart line item"
-#~ msgstr "Pozycja w koszyku"
-
-#~ msgid "All products"
-#~ msgstr "Wszystkie produkty"
-
-#~ msgid "Any class (must be set)"
-#~ msgstr "Dowolna klasa (musi być ustawiona)"
-
-#~ msgid "None"
-#~ msgstr "Brak"
-
-#~ msgid ""
-#~ "An Unexpected HTTP Error occurred during the API request.</p> <p><a href="
-#~ "\"?\" onclick=\"document.location.reload(); return false;\">Try again</a>"
-#~ msgstr ""
-#~ "Wystąpił nieoczekiwany błąd HTTP podczas zapytania API.</p> <p><a href="
-#~ "„?” onclick=„document.location.reload(); return false;”>Spróbuj ponownie</"
-#~ "a>"
-
-#~ msgid "An unknown error occurred"
-#~ msgstr "Wystąpił nieznany błąd"
-
-#~ msgid "Ustawienia"
-#~ msgstr "Ustawienia"
-
-#~ msgid "Dokumentacja"
-#~ msgstr "Dokumentacja"
-
-#~ msgid "Wsparcie"
-#~ msgstr "Wsparcie"
-
-#~ msgid "Additional cost"
-#~ msgstr "Dodatkowy koszt"
-
-#~ msgid "Enter additional shipping cost based on the Value field."
-#~ msgstr "Wpisz dodatkowy koszt bazujący na polu Wartość."
-
-#~ msgid "Value"
-#~ msgstr "Wartość"
-
-#~ msgid "Value for additional cost."
-#~ msgstr "Wartość dodatkowego kosztu."
-
-#~ msgid "Shipping class"
-#~ msgstr "Klasa wysyłkowa"
-
-#~ msgid "Select shipping class that the rule applies to."
-#~ msgstr "Wybierz klasę wysyłkową, do której ma być stosowana reguła."
-
-#~ msgid "Stop"
-#~ msgstr "Zatrzymaj"
-
-#~ msgid "When this rule is matched stop calculating the following rules."
-#~ msgstr ""
-#~ "Jeśli zostanie spełniona wybrana reguła, zatrzymaj obliczanie kolejnych "
-#~ "reguł."
-
-#~ msgid "Cancel"
-#~ msgstr "Anuluj"
-
-#~ msgid "When this rule is matched do not show it in the checkout."
-#~ msgstr ""
-#~ "Jeśli zostanie spełniona wybrana reguła, nie pokazuj jej w zamówieniu."
-
-#~ msgid "Redirecting. If page not redirects click %s here %s."
-#~ msgstr ""
-#~ "Przekierowywanie. Jeśli strona nie przekierowuje cię automatycznie, "
-#~ "kliknij %s tu %s."
-
-#~ msgid ""
-#~ "Flexible Shipping PRO requires Flexible Shipping plugin. <a href=\"%s"
-#~ "\">Install Flexible Shipping →</a>"
-#~ msgstr ""
-#~ "Flexible Shipping PRO wymaga wtyczki Flexible Shipping. <a href=\"%s"
-#~ "\">Zainstaluj Flexible Shipping →</a>"
-
-#~ msgid ""
-#~ "Flexible Shipping PRO requires Flexible Shipping plugin. <a href=\"%s"
-#~ "\">Activate Flexible Shipping →</a>"
-#~ msgstr ""
-#~ "Flexible Shipping PRO wymaga wtyczki Flexible Shipping. <a href=\"%s"
-#~ "\">Włącz Flexible Shipping →</a>"
-
-#~ msgid "Flexible Shipping PRO"
-#~ msgstr "Flexible Shipping PRO"
-
-#~ msgid "https://www.wpdesk.net/products/flexible-shipping-pro-woocommerce/"
-#~ msgstr "https://www.wpdesk.pl/sklep/flexible-shipping-pro-woocommerce/"
-
-#~ msgid ""
-#~ "Extends the free version of Flexible Shipping by adding advanced pro "
-#~ "features."
-#~ msgstr ""
-#~ "Rozszerza bezpłatną wersję Flexible Shipping poprzez dodanie "
-#~ "zaawansowanych ustawień."
-
-#~ msgid "WP Desk"
-#~ msgstr "WP Desk"
-
-#~ msgid "https://www.wpdesk.net/"
-#~ msgstr "https://www.wpdesk.pl/"
diff --git a/classes/wpdesk/class-helper.php b/legacy/class-helper.php
similarity index 52%
rename from classes/wpdesk/class-helper.php
rename to legacy/class-helper.php
index e35a6d32fa2b7ffa6878f08f63c3452b99108b07..c34e83a64a30eafa732760cf3605be0f0268f0fd 100644
--- a/classes/wpdesk/class-helper.php
+++ b/legacy/class-helper.php
@@ -1,75 +1,54 @@
 <?php
 
-if ( ! defined( 'ABSPATH' ) ) {
-	exit;
-} // Exit if accessed directly
+if ( ! defined( 'ABSPATH' ) ) exit; // Exit if accessed directly
 
 if ( ! class_exists( 'WPDesk_Helper_Plugin' ) ) {
 
 	class WPDesk_Helper_Plugin {
 
-	    /** @var array */
 		protected $plugin_data;
 
-		/** @var string */
 		protected $text_domain;
 
-		/** @var string  */
 		protected $ame_activated_key;
 
-		/** @var string  */
 		protected $ame_activation_tab_key;
 
-		/**
-		 * @param array $plugin_data
-		 */
 		function __construct( $plugin_data ) {
 			global $wpdesk_helper_plugins;
 
 			$this->plugin_data = $plugin_data;
-			if ( ! isset( $wpdesk_helper_plugins ) ) {
-				$wpdesk_helper_plugins = array();
-			}
+			if ( ! isset( $wpdesk_helper_plugins ) ) $wpdesk_helper_plugins = array();
 			$plugin_data['helper_plugin'] = $this;
-			$wpdesk_helper_plugins[]      = $plugin_data;
+			$wpdesk_helper_plugins[] = $plugin_data;
 
-			$this->ame_activated_key      = 'api_' . dirname( $plugin_data['plugin'] ) . '_activated';
-			$this->ame_activation_tab_key = 'api_' . dirname( $plugin_data['plugin'] ) . '_dashboard';
+			$this->ame_activated_key = 'api_' . dirname($plugin_data['plugin']) . '_activated';
+			$this->ame_activation_tab_key = 'api_' . dirname($plugin_data['plugin']) . '_dashboard';
 
 		}
 
-		/**
-		 * @return void
-		 */
 		public function inactive_notice() { ?>
-			<?php if ( ! current_user_can( 'manage_options' ) ) {
-				return;
-			} ?>
-			<?php if ( 1 == 1 && isset( $_GET['page'] ) && $this->ame_activation_tab_key == $_GET['page'] ) {
-				return;
-			} ?>
+			<?php if ( ! current_user_can( 'manage_options' ) ) return; ?>
+			<?php if ( 1==1 && isset( $_GET['page'] ) && $this->ame_activation_tab_key == $_GET['page'] ) return; ?>
             <div class="update-nag">
-				<?php printf( __( 'The %s%s%s License Key has not been activated, so the plugin is inactive! %sClick here%s to activate the license key and the plugin.', 'wpdesk-plugin' ), '<strong>', $this->plugin_data['product_id'], '</strong>', '<a href="' . esc_url( admin_url( 'admin.php?page=' . $this->ame_activation_tab_key ) ) . '">', '</a>' ); ?>
+				<?php printf( __( 'The %s%s%s License Key has not been activated, so the plugin is inactive! %sClick here%s to activate the license key and the plugin.', 'wpdesk-plugin' ), '<strong>', $this->plugin_data['product_id'], '</strong>', '<a href="' . esc_url( admin_url( 'admin.php?page='.$this->ame_activation_tab_key ) ) . '">', '</a>' ); ?>
             </div>
 			<?php
 		}
 
-		/**
-		 * @param bool $add_notice
-		 *
-		 * @return bool
-		 */
+
 		function is_active( $add_notice = false ) {
 			if ( get_option( $this->ame_activated_key, '0' ) != 'Activated' ) {
 				if ( $add_notice ) {
 					add_action( 'admin_notices', array( $this, 'inactive_notice' ) );
 				}
-
 				return false;
-			} else {
+			}
+			else {
 				return true;
 			}
 		}
 
 	}
+
 }
diff --git a/plugin-template.php b/plugin-template.php
index 3ab434bef8406beb2d312fd9dc3900b550b868b8..7431336fbde84e46f5baf6d8b3a08f9c8a6bfdfd 100644
--- a/plugin-template.php
+++ b/plugin-template.php
@@ -8,7 +8,7 @@
 	Author: WP Desk
 	Author URI: https://www.wpdesk.net/
 	Text Domain: plugin-template
-	Domain Path: /languages/
+	Domain Path: /lang/
 
 	Copyright 2016 WP Desk Ltd.
 
@@ -33,21 +33,26 @@ if ( ! defined( 'ABSPATH' ) ) {
 	exit;
 } // Exit if accessed directly
 
-$plugin_version = '1.0';
-
-define( 'PLUGIN_TEMPLATE_VERSION', $plugin_version );
-
-require_once( dirname( __FILE__ ) . '/classes/wpdesk/class-requirement-checker.php' );
-
-$requirements_checker = new WPDesk_Requirement_Checker_1_10(
-	__FILE__,
-	'5.5',
-	'4.5',
-	'2.6.14'
+/* THESE TWO VARIABLES CAN BE CHANGED AUTOMATICALLY */
+$plugin_version           = '1.0.0';
+$plugin_release_timestamp = '2020-05-09';
+
+$plugin_name        = 'PluginTemplate';
+$plugin_class_name  = '\WPDesk\WooCommerceFakturownia\Plugin';
+$plugin_text_domain = 'plugin-template';
+$product_id         = 'plugin-template';
+$plugin_file        = __FILE__;
+$plugin_dir         = dirname( __FILE__ );
+
+$requirements = array(
+	'php'     => '5.6',
+	'wp'      => '4.5',
+	'plugins' => array(
+		array(
+			'name'      => 'woocommerce/woocommerce.php',
+			'nice_name' => 'WooCommerce',
+		)
+	)
 );
-$requirements_checker
-	->add_plugin_require('hello.php', 'Hello Dolly')
-	->add_php_module_require('curl' )
-	->add_php_setting_require('allow_url_fopen', 1);
 
-$requirements_checker->check_requirements_and_load_plugin_deferred();
\ No newline at end of file
+require __DIR__ . '/vendor/wpdesk/wp-plugin-flow/src/plugin-init-php52.php';
\ No newline at end of file
diff --git a/src/Plugin.php b/src/Plugin.php
new file mode 100644
index 0000000000000000000000000000000000000000..3fe2591d73f54031f0b700f9c3a5fa51520e4bce
--- /dev/null
+++ b/src/Plugin.php
@@ -0,0 +1,41 @@
+<?php
+
+namespace WPDesk\PluginTemplate;
+
+use Psr\Log\LoggerAwareInterface;
+use Psr\Log\LoggerAwareTrait;
+use WPDesk\Logger\WPDeskLoggerFactory;
+use WPDesk\PluginBuilder\Plugin\AbstractPlugin;
+use WPDesk_Helper_Plugin;
+
+class Plugin extends AbstractPlugin implements LoggerAwareInterface {
+	use LoggerAwareTrait;
+
+	public function __construct( \WPDesk_Plugin_Info $plugin_info ) {
+		parent::__construct( $plugin_info );
+		$this->setLogger( ( new WPDeskLoggerFactory() )->createWPDeskLogger() );
+	}
+
+	public function init() {
+		if ( $this->is_active() ) {
+
+			parent::init();
+		}
+	}
+
+	/**
+	 * Check plugin activation.
+	 *
+	 * @return bool
+	 */
+	private function is_active() {
+		$plugin_data = array(
+			'plugin'     => $this->plugin_info->get_plugin_file_name(),
+			'product_id' => $this->plugin_info->get_product_id(),
+			'version'    => $this->plugin_info->get_version(),
+			'config_uri' => admin_url( 'admin.php?page=wc-settings&tab=integration' ),
+		);
+
+		return ( new WPDesk_Helper_Plugin( $plugin_data ) )->is_active();
+	}
+}
\ No newline at end of file