diff --git a/classes/footnotes.php b/classes/footnotes.php
new file mode 100644
index 0000000..57ab322
--- /dev/null
+++ b/classes/footnotes.php
@@ -0,0 +1,105 @@
+a_obj_Settings = new Class_FootnotesSettings();
+ }
+
+ /* execute class function: init, admin_init and admin_menu */
+ add_action( 'init', array( $this, 'init' ) );
+ add_action( 'admin_init', array( $this, 'admin_init' ) );
+ add_action( 'admin_menu', array( $this, 'admin_menu' ) );
+
+ /* register hook for activating the plugin */
+ register_activation_hook( __FILE__, array( $this, 'activate' ) );
+ /* register hook for deactivating the plugin */
+ register_deactivation_hook( __FILE__, array( $this, 'deactivate' ) );
+ /* register hook for uninstalling the plugin */
+ register_uninstall_hook( __FILE__, array( __CLASS__, 'uninstall' ) );
+ }
+
+ /**
+ * activates the plugin
+ * @since 1.0
+ */
+ function activate()
+ {
+ // unused
+ }
+
+ /**
+ * deactivates the plugin
+ * @since 1.0
+ */
+ function deactivate()
+ {
+ // unused
+ }
+
+ /**
+ * uninstalls the plugin
+ * @since 1.0
+ */
+ function uninstall()
+ {
+ require_once( PLUGIN_DIR . '/includes/uninstall.php' );
+ }
+
+ /**
+ * initialize function
+ * called in the class constructor
+ * @since 1.0
+ */
+ function init()
+ {
+ // unused
+ }
+
+ /**
+ * do admin init stuff
+ * called in the class constructor
+ * @since 1.0
+ */
+ function admin_init()
+ {
+ // unused
+ }
+
+ /**
+ * do admin menu stuff
+ * called in the class constructor
+ * @since 1.0
+ */
+ function admin_menu()
+ {
+ // unused
+ }
+
+} /* class Class_Footnotes */
\ No newline at end of file
diff --git a/classes/footnotes_settings.php b/classes/footnotes_settings.php
new file mode 100644
index 0000000..32cc67c
--- /dev/null
+++ b/classes/footnotes_settings.php
@@ -0,0 +1,411 @@
+ 'yes',
+ FOOTNOTE_INPUTFIELD_REFERENCES_LABEL => 'References',
+ FOOTNOTE_INPUTFIELD_COLLAPSE_REFERENCES => ''
+ );
+ /*
+ * resulting pagehook for adding a new sub menu page to the settings
+ * @since 1.0
+ */
+ var $a_str_Pagehook;
+ /*
+ * collection of settings values for this plugin
+ * @since 1.0
+ */
+ var $a_arr_Options;
+ /*
+ * collection of tabs for the settings page of this plugin
+ * @since 1.0
+ */
+ private $a_arr_SettingsTabs = array();
+
+ /**
+ * @constructor
+ * @since 1.0
+ */
+ function __construct()
+ {
+ /* validates the settings of the plugin and replaces them with the default settings if invalid */
+ add_option( FOOTNOTE_SETTINGS_CONTAINER, self::$a_arr_Default_Settings );
+ /* loads and filters the settings for this plugin */
+ $this->a_arr_Options = footnotes_filter_options( FOOTNOTE_SETTINGS_CONTAINER );
+
+ /* execute class includes on action-even: init, admin_init and admin_menu */
+ add_action( 'init', array( $this, 'LoadScriptsAndStylesheets' ) );
+ add_action( 'admin_init', array( $this, 'RegisterSettings' ) );
+
+ add_action( 'admin_init', array( $this, 'RegisterTab_General' ) );
+ add_action( 'admin_init', array( $this, 'RegisterTab_HowTo' ) );
+
+ add_action( 'admin_menu', array( $this, 'AddSettingsMenuPanel' ) );
+ }
+
+ /**
+ * initialize settings page, loads scripts and stylesheets needed for the layout
+ * called in class constructor @ init
+ * @since 1.0
+ */
+ function LoadScriptsAndStylesheets()
+ {
+ /* add the jQuery plugin (already registered by WP) */
+ wp_enqueue_script( 'jquery' );
+ /* register public stylesheet */
+ wp_register_style( 'footnote_public_style', plugins_url( '../css/footnote.css', __FILE__ ) );
+ /* add public stylesheet */
+ wp_enqueue_style( 'footnote_public_style' );
+ /* register settings stylesheet */
+ wp_register_style( 'footnote_settings_style', plugins_url( '../css/settings.css', __FILE__ ) );
+ /* add settings stylesheet */
+ wp_enqueue_style( 'footnote_settings_style' );
+ }
+
+ /**
+ * register the settings field in the database for the "save" function
+ * called in class constructor @ admin_init
+ * @since 1.0
+ */
+ function RegisterSettings()
+ {
+ register_setting( FOOTNOTE_SETTINGS_LABEL_GENERAL, FOOTNOTE_SETTINGS_CONTAINER );
+ }
+
+ /**
+ * sets the plugin's title for the admins settings menu
+ * called in class constructor @ admin_menu
+ * @since 1.0
+ */
+ function AddSettingsMenuPanel()
+ {
+ /* current user needs the permission to update plugins for further access */
+ if ( !current_user_can( 'update_plugins' ) ) {
+ return;
+ }
+ /* submenu page title */
+ $l_str_PageTitle = 'footnotes';
+ /* submenu title */
+ $l_str_MenuTitle = 'footnotes';
+ /* Add a new submenu to the standard Settings panel */
+ $this->a_str_Pagehook = add_options_page( $l_str_PageTitle, $l_str_MenuTitle, 'administrator', FOOTNOTES_SETTINGS_PAGE_ID, array( $this, 'OutputSettingsPage' ) );
+ }
+
+ /**
+ * Plugin Options page rendering goes here, checks
+ * for active tab and replaces key with the related
+ * settings key. Uses the plugin_options_tabs method
+ * to render the tabs.
+ * @since 1.0
+ */
+ function OutputSettingsPage()
+ {
+ /* gets active tag, or if nothing set the "general" tab will be set to active */
+ $l_str_tab = isset( $_GET[ 'tab' ] ) ? $_GET[ 'tab' ] : FOOTNOTE_SETTINGS_LABEL_GENERAL;
+ /* outputs all tabs */
+ echo '
';
+ $this->OutputSettingsPageTabs();
+ /* outputs a form with the content of the current active tab */
+ echo '';
+ echo '
';
+ }
+
+ /**
+ * Renders our tabs in the plugin options page,
+ * walks through the object's tabs array and prints
+ * them one by one. Provides the heading for the
+ * plugin_options_page method.
+ * @since 1.0
+ */
+ function OutputSettingsPageTabs()
+ {
+ /* gets active tag, or if nothing set the "general" tab will be set to active */
+ $l_str_CurrentTab = isset( $_GET[ 'tab' ] ) ? $_GET[ 'tab' ] : FOOTNOTE_SETTINGS_LABEL_GENERAL;
+ screen_icon();
+ echo '