diff --git a/contrib/drutex_blahtex.inc b/contrib/drutex_blahtex.inc
index 2db88fd..6ece104 100644
--- a/contrib/drutex_blahtex.inc
+++ b/contrib/drutex_blahtex.inc
@@ -9,19 +9,19 @@
  */
 
 /**
- * Implementation of subhook_info().
+ * Implements hook_info().
  */
 function drutex_blahtex_info($format = -1) {
   return (object) array(
     'title' => t('blahtex (MathML)'),
     'description' => t('Provides math environments to create MathML with blahtex.'),
     'toggle' => TRUE,
-    'weight' => 16
+    'weight' => 16,
   );
 }
 
 /**
- * Implementation of subhook_defaults().
+ * Implements hook_defaults().
  */
 function drutex_blahtex_defaults() {
   $D['drutex_blahtex_active'] = FALSE;
@@ -30,17 +30,17 @@ function drutex_blahtex_defaults() {
 }
 
 /**
- * Implementation of subhook_node2html().
+ * Implements hook_node2html().
  */
 function drutex_blahtex_node2html() {
   $E = array();
 
   /* Inline math between $ and $ */
   $E[] = (object) array(
-      'pattern' => '@(?<!\\\\)\$(.*?[^\\\\])\$@se',
-      'replacement' => "drutex_blahtex('$1', '<var>format</var>')",
-      'weight' => -20,
-    );
+    'pattern' => '@(?<!\\\\)\$(.*?[^\\\\])\$@se',
+    'replacement' => "drutex_blahtex('$1', '<var>format</var>')",
+    'weight' => -20,
+  );
 
   return $E;
 }
diff --git a/contrib/drutex_eukleides.inc b/contrib/drutex_eukleides.inc
index 581e483..3b6f4c1 100644
--- a/contrib/drutex_eukleides.inc
+++ b/contrib/drutex_eukleides.inc
@@ -8,19 +8,19 @@
  */
 
 /**
- * Implementation of subhook_info().
+ * Implements hook_info().
  */
 function drutex_eukleides_info($format = -1) {
   return (object) array(
     'title' => t('Eukleides'),
     'description' => t('Provides an Eukleides environment.'),
     'toggle' => TRUE,
-    'weight' => 16
+    'weight' => 16,
   );
 }
 
 /**
- * Implementation of subhook_defaults().
+ * Implements hook_defaults().
  */
 function drutex_eukleides_defaults() {
   $D['drutex_eukleides_active'] = FALSE;
@@ -28,18 +28,18 @@ function drutex_eukleides_defaults() {
 }
 
 /**
- * Implementation of subhook_node2html().
+ * Implements hook_node2html().
  */
 function drutex_eukleides_node2html() {
   $E = array();
 
   $E[] = (object) array(
-      'pattern' => '@<eukleides([^>]*)>(.+?)</eukleides>@se',
-      'replacement' => "drutex_eukleides('$2', '<var>format</var>', '$1')",
-      'weight' => -10,
-      'info' => t('Eukleides environment'),
-      'id' => 'eukleides'
-    );
+    'pattern' => '@<eukleides([^>]*)>(.+?)</eukleides>@se',
+    'replacement' => "drutex_eukleides('$2', '<var>format</var>', '$1')",
+    'weight' => -10,
+    'info' => t('Eukleides environment'),
+    'id' => 'eukleides',
+  );
 
   return $E;
 }
diff --git a/contrib/drutex_example.inc b/contrib/drutex_example.inc
index 0eb1fc7..c4530e6 100644
--- a/contrib/drutex_example.inc
+++ b/contrib/drutex_example.inc
@@ -8,19 +8,19 @@
  */
 
 /**
- * Implementation of subhook_info().
+ * Implements hook_info().
  */
 function drutex_example_info($format = -1) {
   return (object) array(
     'title' => t('Exampe submodule'),
     'description' => t('Provides some senseless stuff.'),
     'toggle' => TRUE, /* tells drutex if the user can activate/deactivate this submodule */
-    'weight' => 20 /* helps ordering the fieldsets on the configuration page */
+    'weight' => 20 /* helps ordering the fieldsets on the configuration page */,
   );
 }
 
 /**
- * Implementation of subhook_defaults().
+ * Implements hook_defaults().
  */
 function drutex_example_defaults() {
   $D['drutex_blahtex_active'] = FALSE;
@@ -30,31 +30,31 @@ function drutex_example_defaults() {
 }
 
 /**
- * Implementation of subhook_node2html().
+ * Implements hook_node2html().
  */
 function drutex_example_node2html() {
   $E = array();
 
   /* blabla{hello world} => <xyz>hellp world</xyz> */
   $E[] = (object) array(
-      'type' => 'latex-command',
-      'pattern' => 'blabla',
-      'replacement' => '<xyz>$1</xyz>',
-    );
+    'type' => 'latex-command',
+    'pattern' => 'blabla',
+    'replacement' => '<xyz>$1</xyz>',
+  );
 
   /* abcde => edcba */
   $E[] = (object) array(
-      'pattern' => '@abcde@s',
-      'replacement' => 'edcba',
-      'weight' => 100,
-      /* type is regex! */
-    );
+    'pattern' => '@abcde@s',
+    'replacement' => 'edcba',
+    'weight' => 100,
+    /* type is regex! */
+  );
 
   return $E;
 }
 
 /**
- * Implementation of subhook_filter_settings().
+ * Implements hook_filter_settings().
  */
 function drutex_example_filter_settings($format = -1) {
   $form["drutex_example_sometext_$format"] = array(
@@ -62,14 +62,14 @@ function drutex_example_filter_settings($format = -1) {
     '#title' => t('Some text'),
     '#rows' => 4,
     '#cols' => 50,
-    '#default_value' => drutex_var_get("drutex_example_sometext_$format")
+    '#default_value' => drutex_var_get("drutex_example_sometext_$format"),
   );
 
   return $form;
 }
 
 /**
- * Implementation of (sub)hook_perm().
+ * Implements hook_perm().
  */
 function drutex_example_perm() {
   return array('access examples');
diff --git a/drutex.info b/drutex.info
index 5a898fa..26a6005 100644
--- a/drutex.info
+++ b/drutex.info
@@ -9,3 +9,18 @@ core = "7.x"
 project = "drutex"
 datestamp = "1298619165"
 
+
+files[] = drutex.install
+files[] = drutex.module
+files[] = drutex_latex.inc
+files[] = drutex_linebreak.inc
+files[] = drutex_numbering.inc
+files[] = drutex_pdf.inc
+files[] = drutex_remote.inc
+files[] = drutex_render.inc
+files[] = drutex_security.inc
+files[] = drutex_tools.inc
+files[] = drutex_verbatim.inc
+files[] = contrib/drutex_blahtex.inc
+files[] = contrib/drutex_eukleides.inc
+files[] = contrib/drutex_example.inc
diff --git a/drutex.install b/drutex.install
index b607427..091f36a 100644
--- a/drutex.install
+++ b/drutex.install
@@ -11,11 +11,15 @@
  * Implementation of hook_uninstall().
  */
 
-function drutex_uninstall() {
+/**
+ It is better to use new filter setting column in drupal 7 instead of drupal variables so 
+when the port is complete this uninstall function is no more necessery.
+ */
 
-//  delete all drutex variables in the variable table and clear the variables cache
-  db_query("DELETE FROM {variable} WHERE name like 'drutex_%%'");
-  cache_clear_all('variables', 'cache');
-}
+//function drutex_uninstall() {
 
+//  delete all drutex variables in the variable table and clear the variables cache
+//  db_query("DELETE FROM {variable} WHERE name like 'drutex_%%'");
+//  cache_clear_all('variables', 'cache');
+//}
 
diff --git a/drutex.module b/drutex.module
index d254b27..40d196a 100644
--- a/drutex.module
+++ b/drutex.module
@@ -9,7 +9,11 @@
  * Implementation of hook_link().
  */
 
-function drutex_link($type, $node = NULL, $teaser = FALSE) {
+/**
+ * @todo Please document this function. It should be ported.
+ * @see http://drupal.org/node/1354
+ */
+ function drutex_link($type, $node = NULL, $teaser = FALSE) {
   $links = array();
   if ($type == 'node') {
     $format = $node->format;
@@ -30,9 +34,9 @@ function drutex_link($type, $node = NULL, $teaser = FALSE) {
   }
   return $links;
 }
-
+ 
 /**
- * Implementation of hook_help().
+ * Implements hook_help().
  */
 function drutex_help($path, $arg) {
   switch ($path) {
@@ -41,52 +45,79 @@ function drutex_help($path, $arg) {
   }
 }
 
-/**
- * Implementation of hook_filter_tips().
- */
-function drutex_filter_tips($delta, $format, $long) {
-  $output = '';
-    $output .= t('LaTex commands embedded in text will be interpreted and rendered. Additional information can be found at <a href ="http://groups.drupal.org/node/1263"> DruTex Documentation Pages </a>');
-    $output .= '<ul>';
-    foreach (drutex_submodule_list($format) as $submodule) {
-      if (drutex_submodule_is_active($submodule, $format)) {
-        $helpfunction = 'drutex_'. $submodule .'_filter_tips';
-        if (function_exists($helpfunction)) {
-          $res = $helpfunction($delta, $format, $long);
-          if ($res != '') {
-            $output .= '<li>'. $res .'</li>';
-          }
-        }
-      }
+function drutex_filter_info() {
+
+  $filters['DruTeX'] = array(
+    'title' => t('DruTeX'),
+    'description' => t('Allows users to render LaTeX/TeX in many different ways.'),
+    'process callback' => '_filter_drutex_process',
+    'settings callback' => '_filter_drutex_settings',
+    'tips callback'  => '_filter_drutex_tips',
+    'default settings' => array(
+		/* Directories */
+		'drutex_dir' => dirname(__FILE__),
+		'drutex_dir_images' => variable_get('file_directory_path', 'files') . '/tex',
+		'drutex_dir_temporary' => file_directory_temp(),
+		'drutex_url_images' => variable_get('file_directory_path', 'files') . '/tex',
+		/* other */
+		'drutex_dpi' => '107',
+		'drutex_imagetype' => 'png',
+		'drutex_stylesheet' => drupal_get_path('module', 'drutex') . '/drutex.css',
+		'drutex_conversion' => 'dvipng'),
+    'cache' => FALSE,
+  );
+  
+   /*
+   provide submodule-specific defaults
+   */
+  $submodule_objects = drutex_submodule_objects(NULL);
+  usort($submodule_objects, '_drutex_weight_sort_cmp');
+
+  foreach ($submodule_objects as $obj) {
+    if (drutex_submodule_hook($obj->submodule, 'defaults')) {
+      $filters['DruTeX']['default settings']["drutex_{$obj->submodule}"] = array();
+
+      $filters['DruTeX']['default settings']["drutex_{$obj->submodule}"] = array_merge(
+        $filters['DruTeX']['default settings']["drutex_{$obj->submodule}"],
+        drutex_submodule_invoke($obj->submodule, 'defaults')
+      );
+      
+      if ($filters['DruTeX']['default settings']["drutex_{$obj->submodule}"]["drutex_{$obj->submodule}_active"]){
+			$filters['DruTeX']['default settings']['drutex_submodules']["{$obj->submodule}"] = 1;	  }
     }
-    $ouptut .= '</ul>';
-  return $output;
-}
+  }
+  
 
-/**
- * Implementation of hook_filter().
- */
-function drutex_filter($op, $delta = 0, $format = -1, $text = '') {
-  switch ($op) {
-    case 'list':
-      return array(0 => t('DruTeX'));
+  
+  return $filters;
+}
 
-    case 'description':
-      return t('Allows users to render LaTeX/TeX in many different ways.');
+  
 
-    case 'process':
-      return drutex_node2html($text, $format);
 
-    case 'settings':
-      return _drutex_filter_settings($format);
 
-    default:
-      return $text;
+function _filter_drutex_tips($filter, $format, $long = FALSE) {
+  $output = '';
+  $output .= t('LaTex commands embedded in text will be interpreted and rendered. Additional information can be found at <a href ="http://groups.drupal.org/node/1263"> DruTex Documentation Pages </a>');
+  $output .= '<ul>';
+  foreach (drutex_submodule_list($format->format) as $submodule) {
+    if (drutex_submodule_is_active($submodule, $format->format)) {
+      $helpfunction = 'drutex_' . $submodule . '_filter_tips';
+      if (function_exists($helpfunction)) {
+        $res = $helpfunction($filter, $format->format, $long);
+        if ($res != '') {
+          $output .= '<li>' . $res . '</li>';
+        }
+      }
+    }
   }
+  $ouptut .= '</ul>';
+  return $output;
 }
 
+
 /**
- * Implementation of hook_init()
+ * Implements hook_init().
  */
 function drutex_init() {
   // Load our stylesheets
@@ -94,11 +125,11 @@ function drutex_init() {
 }
 
 /**
- * Implementation of hook_menu().
+ * Implements hook_menu().
  */
 function drutex_menu() {
   $items = array();
-  if (drutex_submodule_is_active('remote')) {
+  if (drutex_submodule_is_active('remote', NULL)) {
     $items['drutex/remote'] = array(
       'title' => 'Drutex Remote Rendering',
       'file' => 'drutex_remote.inc',
@@ -108,7 +139,7 @@ function drutex_menu() {
       'type' => MENU_CALLBACK,
     );
 
-    $items['admin/settings/drutex'] = array(
+    $items['admin/config/drutex'] = array(
       'title' => 'DruTeX Settings',
       'description' => 'Adjusts the settings for the remote LaTeX rendering interface',
       'file' => 'drutex_remote.inc',
@@ -119,7 +150,7 @@ function drutex_menu() {
       'type' => MENU_NORMAL_ITEM,
     );
   }
-  if (drutex_submodule_is_active('pdf')) {
+  if (drutex_submodule_is_active('pdf', NULL)) {
     $items['drutex/pdf'] = array(
       'title' => 'node2pdf',
       'file' => 'drutex_pdf.inc',
@@ -175,6 +206,8 @@ function drutex_var_get($ask) {
 
 
 /**
+ * Due to new filter system in D7 this function is not
+ * used anymore. Default settings should be set in filter info hook
  * DruTeX default values.
  *
  * @param $ask
@@ -189,17 +222,17 @@ function drutex_var_default($ask) {
 
     /* Directories */
     $D['drutex_dir']                  = dirname(__FILE__);
-    $D['drutex_dir_images']           = variable_get('file_directory_path', 'files') .'/tex';
-    $D['drutex_dir_temporary']        = variable_get('file_directory_temp', FILE_DIRECTORY_TEMP);
-    $D['drutex_url_images']           = variable_get('file_directory_path', 'files') .'/tex';
+    $D['drutex_dir_images']           = variable_get('file_directory_path', 'files') . '/tex';
+    $D['drutex_dir_temporary']        = file_directory_temp();
+    $D['drutex_url_images']           = variable_get('file_directory_path', 'files') . '/tex';
 
     /* other */
     $D['drutex_dpi'] = '107';
     $D['drutex_imagetype'] = 'png';
-    $D['drutex_stylesheet'] = drupal_get_path('module', 'drutex') .'/drutex.css';
+    $D['drutex_stylesheet'] = drupal_get_path('module', 'drutex') . '/drutex.css';
     $D['drutex_conversion'] = 'dvipng';
 
-    $D = array_merge($D, drutex_submodule_invoke_all('defaults'));
+    //$D = array_merge($D, drutex_submodule_invoke_all('defaults'));
   }
 
   if (isset($D[$ask])) {
@@ -213,112 +246,112 @@ function drutex_var_default($ask) {
 /**
  * Filter-settings page.
  */
-function _drutex_filter_settings($format = -1) {
-  $form['drutex_submodules'] = array(
+function _filter_drutex_settings($form, &$form_state, $filter, $format, $defaults, $filters) {
+	$filter->settings = drupal_array_merge_deep($defaults, $filter->settings);
+  $settings['drutex_submodules'] = array(
     '#type' => 'fieldset',
     '#title' => t('DruTeX :: Submodules'),
     '#collapsible' => TRUE,
-    '#collapsed' => FALSE
+    '#collapsed' => FALSE,
   );
 
-  $submodule_objects = drutex_submodule_objects($format);
+  $submodule_objects = drutex_submodule_objects(NULL);
   usort($submodule_objects, '_drutex_weight_sort_cmp');
 
   /* list all submodules that can be (de)activated */
   foreach ($submodule_objects as $obj) {
     if ($obj->toggle) {
-      $form['drutex_submodules']["drutex_{$obj->submodule}_active_{$format}"] = array(
+      $settings['drutex_submodules']["{$obj->submodule}"] = array(
         '#type' => 'checkbox',
         '#title' => $obj->title,
-        '#default_value' => $obj->active,
-        '#description' => $obj->description
+        '#default_value' => $filter->settings['drutex_submodules']["{$obj->submodule}"],
+        '#description' => $obj->description,
       );
     }
   }
 
   /* try to create the image directory and set the rights
-     if not done already
-  */
+   if not done already
+   */
 
-  $image_dir = drutex_var_get("drutex_dir_images_$format");
-  file_check_directory($image_dir, FILE_CREATE_DIRECTORY);
+  $image_dir = $filter->settings['drutex_dir_images'];
+  file_prepare_directory($image_dir, FILE_CREATE_DIRECTORY);
 
   /* global settings
-     that means: settings all submodules can share
-     but it remains filter specific
-  */
+   that means: settings all submodules can share
+   but it remains filter specific
+   */
 
-  $form['drutex_base'] = array(
+  $settings['drutex_base'] = array(
     '#type' => 'fieldset',
     '#title' => t('DruTeX :: Base Settings'),
     '#collapsible' => TRUE,
-    '#collapsed' => FALSE
+    '#collapsed' => FALSE,
   );
 
   /* determine whether temporary dir is writeable */
-  $is_writable = is_writable(drutex_var_get("drutex_dir_temporary_$format"));
+  $is_writable = is_writable($filter->settings['drutex_base']['drutex_dir_temporary']);
 
-  $form['drutex_base']["drutex_dir_temporary_$format"] = array(
+  $settings['drutex_base']['drutex_dir_temporary'] = array(
     '#type' => 'textfield',
     '#title' => t('Temporary directory'),
     '#size' => 80,
     '#maxlength' => 100,
-    '#default_value' => drutex_var_get("drutex_dir_temporary_$format"),
+    '#default_value' => $filter->settings['drutex_base']['drutex_dir_temporary'],
     '#description' => t('Directory for temporaray actions. Has to be writable by apache.'),
-    '#attributes' => $is_writable ? array() : array('style' => 'border-color:red')
+    '#attributes' => $is_writable ? array() : array('style' => 'border-color:red'),
   );
 
   /* determine whether image dir is writeable */
-  $is_writable = is_writable(drutex_var_get("drutex_dir_images_$format"));
+  $is_writable = is_writable($filter->settings['drutex_base']['drutex_dir_images']);
 
-  $form['drutex_base']["drutex_dir_images_$format"] = array(
+  $settings['drutex_base']['drutex_dir_images'] = array(
     '#type' => 'textfield',
     '#title' => t('Image directory'),
     '#size' => 80,
     '#maxlength' => 100,
-    '#default_value' => drutex_var_get("drutex_dir_images_$format"),
+    '#default_value' => $filter->settings['drutex_base']['drutex_dir_images'],
     '#description' => t('Directory where images are saved. Has to be writable by apache.'),
-    '#attributes' => $is_writable ? array() : array('style' => 'border-color:red')
+    '#attributes' => $is_writable ? array() : array('style' => 'border-color:red'),
   );
 
 
 
-  $form['drutex_base']["drutex_url_images_$format"] = array(
+  $settings['drutex_base']['drutex_url_images'] = array(
     '#type' => 'textfield',
     '#title' => t('Image URL'),
     '#size' => 80,
     '#maxlength' => 100,
-    '#default_value' => drutex_var_get("drutex_url_images_$format"),
-    '#description' => t('URL that points to the Image directory. Can be a complete URL or a path relative to the Drupal base dir (recommended).')
+    '#default_value' => $filter->settings['drutex_base']['drutex_url_images'],
+    '#description' => t('URL that points to the Image directory. Can be a complete URL or a path relative to the Drupal base dir (recommended).'),
   );
 
-  $form['drutex_base']['note2'] = array(
+  $settings['drutex_base']['note2'] = array(
     '#value' => t('The image directory may be used by some submodules to place
-      other files in there, e.g. pdf and tex files.')
+      other files in there, e.g. pdf and tex files.'),
   );
 
 
   /*
-     provide submodule-specific settings
-  */
+   provide submodule-specific settings
+   */
 
   foreach ($submodule_objects as $obj) {
     if (drutex_submodule_hook($obj->submodule, 'filter_settings')) {
-      $form["drutex_{$obj->submodule}"] = array(
+      $settings["drutex_{$obj->submodule}"] = array(
         '#type' => 'fieldset',
         '#title' => "DruTeX :: {$obj->title}",
         '#collapsible' => TRUE,
         '#collapsed' => !$obj->active
       );
 
-      $form["drutex_{$obj->submodule}"] = array_merge(
-        $form["drutex_{$obj->submodule}"],
-        drutex_submodule_invoke($obj->submodule, 'filter_settings', $format)
+     $settings["drutex_{$obj->submodule}"] = array_merge(
+       $settings["drutex_{$obj->submodule}"],
+        drutex_submodule_invoke($obj->submodule, 'filter_settings', $filter)
       );
     }
   }
-
-  return $form;
+    return $settings;
 }
 
 /**
@@ -330,7 +363,7 @@ function drutex_set_stylesheet() {
   if (!$done) {
     $css = drutex_var_get("drutex_stylesheet");
     if (!empty($css)) {
-      drupal_add_css($css, 'module');
+      drupal_add_css($css);
     }
     $done = TRUE;
   }
@@ -346,30 +379,38 @@ function drutex_set_stylesheet() {
  * @return
  *   The text after applying all transformation rules.
  */
-function drutex_node2html($text, $format = -1) {
+function _filter_drutex_process($text, $filter, $format, $langcode, $cache, $cache_id) {
   /* preprocess */
 
-  foreach (drutex_submodule_implements('node2html_preprocess', $format) as $submodule) {
-    $text = drutex_submodule_invoke($submodule, 'node2html_preprocess', $text, $format);
-  }
+ foreach ($filter->settings['drutex_submodules'] as $submodule => $active) {
+		if ($active && drutex_submodule_hook($submodule, 'node2html_preprocess')){
+			$text = drutex_submodule_invoke($submodule, 'node2html_preprocess', $text, $format->format);
+		}
+	  }
 
   /* main cycle */
-  $A = drutex_submodule_invoke_all('node2html', "format=$format");
+  $A = drutex_submodule_invoke_all('node2html', $filter);
   $B = module_invoke_all('drutex2html');
   $entities = array_merge($A, $B);
   usort($entities, '_drutex_weight_sort_cmp');
 
   foreach ($entities as $entity) {
-    list($pattern, $replacement) = _drutex_create_regex($entity, $format);
+    list($pattern, $replacement) = _drutex_create_regex($entity, $filter, $format->format);
     $text = preg_replace($pattern, $replacement, $text);
   }
 
   $text = _drutex_unhide_all($text);
 
   /* postprocess */
-  foreach (drutex_submodule_implements('node2html_postprocess', $format) as $submodule) {
-    $text = drutex_submodule_invoke($submodule, 'node2html_postprocess', $text, $format);
-  }
+   foreach ($filter->settings['drutex_submodules'] as $submodule => $active) {
+		if ($active && drutex_submodule_hook($submodule, 'node2html_postprocess')){
+			$text = drutex_submodule_invoke($submodule, 'node2html_postprocess', $text, $format->format);
+		}
+	  }
+	  
+//  foreach (drutex_submodule_implements('node2html_postprocess', $filter, $format->format) as $submodule) {
+ //   $text = drutex_submodule_invoke($submodule, 'node2html_postprocess', $text, $format->format);
+ // }
 
   return $text;
 }
@@ -401,9 +442,9 @@ function _drutex_weight_sort_cmp($a, $b) {
  * @return
  *   array($pattern, $replacement)
  */
-function _drutex_create_regex($entity, $format = -1) {
+function _drutex_create_regex($entity, $filter, $format) {
   $pattern = $entity->pattern;
-  $replacement = preg_replace('@<var>([^<]+)</var>@se', "$$1", $entity->replacement);
+  $replacement = preg_replace(array('@\'<var>([^<]+)</var>\'@se'), array('$1'), $entity->replacement);
 
   switch ($entity->type) {
     case 'latex-command':
@@ -459,7 +500,7 @@ function drutex_parse_attributes($subject) {
 function drutex_merge_attributes($A) {
   $str = '';
   foreach ($A as $key => $val) {
-    $str .= strtolower($key) ."=\"$val\" ";
+    $str .= strtolower($key) . "=\"$val\" ";
   }
   return trim($str);
 }
@@ -496,10 +537,10 @@ function _drutex_hide($cmd = 'get', $subject = '') {
 
   if ($cmd == 'set') {
     $hidden[$count] = _drutex_unescape($subject);
-    return _drutex_secret() .':'. $count++ .':';
+    return _drutex_secret() . ':' . $count++ . ':';
   }
   elseif ($cmd == 'get') {
-    $subject = (int)$subject;
+    $subject = (int) $subject;
     return $hidden[$subject];
   }
 }
@@ -563,10 +604,10 @@ function _drutex_unescape($text, $quote = '"') {
  *
  * This directory should normally be deleted automatically.
  */
-function _drutex_create_temporary_dir($format = -1) {
+function _drutex_create_temporary_dir($filter) {
   static $n = 1;
-  $dir = drutex_var_get("drutex_dir_temporary_$format") .'/drutex-'. _drutex_secret() .'-'. $n++;
-  file_check_directory($dir, FILE_CREATE_DIRECTORY);
+  $dir = $filter->settings['drutex_base']['drutex_dir_temporary'] . '/drutex-' . _drutex_secret() . '-' . $n++;
+  file_prepare_directory($dir, FILE_CREATE_DIRECTORY);
   return $dir;
 }
 
@@ -579,8 +620,8 @@ function _drutex_delete_dir($dir) {
   if ($handle = opendir($dir)) {
     while ($item = readdir($handle)) {
       if ($item != '.' && $item != '..') {
-        $file = $dir .'/'. $item;
-        file_delete($file);
+        $file = $dir . '/' . $item;
+        file_unmanaged_delete($file);
       }
     }
     closedir($handle);
@@ -595,8 +636,8 @@ function _drutex_copy_dir($source, $dest) {
   if ($handle = opendir($source)) {
     while ($item = readdir($handle)) {
       if ($item != '.' && $item != '..') {
-        $sourcefile = $source .'/'. $item;
-        $destfile = $dest .'/'. $item;
+        $sourcefile = $source . '/' . $item;
+        $destfile = $dest . '/' . $item;
         file_copy($sourcefile, $destfile);
       }
     }
@@ -608,8 +649,12 @@ function _drutex_copy_dir($source, $dest) {
  * Get URL where the images are saved.
  */
 
-function drutex_get_image_url($format = -1) {
-  $path = drutex_var_get("drutex_url_images_$format");
+/**
+ * @todo Please document this function.
+ * @see http://drupal.org/node/1354
+ */
+function drutex_get_image_url($filter) {
+  $path = $filter->settings['drutex_base']['drutex_url_images'];
 
   /* different behaviour for absolute and relative paths */
   if (strpos($path, 'http') === 0) {
@@ -622,18 +667,20 @@ function drutex_get_image_url($format = -1) {
 
 
 /**
- * Implementation of hook_nodeapi().
+ * Implements hook_nodeapi().
  *
  * Notify all submodules when a node changed.
  */
-function drutex_nodeapi(&$node, $op, $teaser = FALSE, $page = FALSE) {
+function drutex_nodeapi_OLD(&$node, $op, $teaser = FALSE, $page = FALSE) {
+  // TODO Remaining code in this function needs to be moved to the appropriate new hook function.
   drutex_submodule_invoke_all('nodeapi', $node, $op, $teaser, $page, "format={$node->format}");
 }
 
 /**
- * Implementation of hook_perm().
+ * Implements hook_permission().
  */
-function drutex_perm() {
+function drutex_permission() {
+  // TODO The array elements in this hook function need to be changed.
   return drutex_submodule_invoke_all('perm');
 }
 
@@ -650,9 +697,9 @@ function drutex_perm() {
  *   In every other case, the function returns TRUE, if the submodule is installed and
  *   marked active in the specified input format.
  */
-function drutex_submodule_is_active($submodule, $format = -1) {
-  if (is_file(drupal_get_path('module', 'drutex') ."/drutex_{$submodule}.inc")) {
-    if ($format == -1) {
+function drutex_submodule_is_active($submodule, $format = NULL) {
+  if (is_file(drupal_get_path('module', 'drutex') . "/drutex_{$submodule}.inc")) {
+    if ($format == NULL) {
       return TRUE;
     }
     else if (_format_uses_drutex($format) && drutex_var_get("drutex_{$submodule}_active_{$format}")) {
@@ -668,19 +715,19 @@ function drutex_submodule_is_active($submodule, $format = -1) {
  *
  * The format '-1' always 'uses' DruTeX.
  */
-function _format_uses_drutex($format = -1) {
+function _format_uses_drutex($format = NULL) {
   static $cache;
 
   if (!isset($cache)) {
     $cache = array();
-    $result = db_query("SELECT format from {filters} WHERE module = 'drutex'");
+    $result = db_query("SELECT format from {filter} WHERE module = :module", array(':module' => 'drutex'));
 
-    while ($obj = db_fetch_object($result)) {
+    foreach($result as $obj) {
       $cache[$obj->format] = TRUE;
     }
 
     /* the format -1 always 'uses' DruTeX */
-    $cache[-1] = TRUE;
+    $cache[NULL] = TRUE;
   }
 
   return isset($cache[$format]);
@@ -700,13 +747,13 @@ function _format_uses_drutex($format = -1) {
  * @return
  *   Array of info objects.
  */
-function drutex_submodule_objects($format = -1) {
+function drutex_submodule_objects($format) {
   static $objects;
 
   if (!isset($objects[$format])) {
     $objects[$format] = array();
 
-    foreach (drutex_submodule_implements('info') as $submodule) {
+    foreach (drutex_submodule_implements('info', $format) as $submodule) {
       $obj = drutex_submodule_invoke($submodule, 'info', $format);
       $obj->submodule = $submodule;
       $obj->active = drutex_submodule_is_active($submodule, $format);
@@ -764,13 +811,13 @@ function drutex_submodule_invoke() {
  * @return
  *   An associative array whose keys and values are the names of the submodules.
  */
-function drutex_submodule_list($format = -1) {
+function drutex_submodule_list($format = NULL) {
   static $list;
 
   if (!isset($list[$format])) {
     $list[$format] = array();
     $path = drupal_get_path('module', 'drutex');
-    $files = file_scan_directory($path, '^drutex_.*\.inc$');
+    $files = file_scan_directory($path, '/^drutex_.*\.inc$/');
 
     foreach ($files as $file) {
       $submodule = substr($file->name, strlen('drutex_'));
@@ -793,7 +840,7 @@ function drutex_submodule_list($format = -1) {
  * @return
  *   An array with the names of the modules which are implementing this hook.
  */
-function drutex_submodule_implements($hook, $format = -1) {
+function drutex_submodule_implements($hook) {
   static $implementations;
 
   if (!isset($implementations[$hook][$format])) {
@@ -814,6 +861,9 @@ function drutex_submodule_implements($hook, $format = -1) {
  *
  * @param $hook
  *   The name of the hook to invoke.
+ * @param $filter
+ *   The current filter to determine which submodules are active.
+ *
  * @param ...
  *   Arguments to pass to the hook.
  * @return
@@ -823,17 +873,39 @@ function drutex_submodule_implements($hook, $format = -1) {
 function drutex_submodule_invoke_all() {
   $args = func_get_args();
   $hook = array_shift($args);
+  $filter = array_shift($args);
   $return = array();
-  $format = _drutex_rewrite_format_call($args);
-  foreach (drutex_submodule_implements($hook, $format) as $submodule) {
-    $result = call_user_func_array("drutex_{$submodule}_{$hook}", $args);
-    if (isset($result) && is_array($result)) {
-      $return = array_merge($return, $result);
-    }
-    else if (isset($result)) {
-      $return[] = $result;
-    }
-  }
+   if ($filter == NULL) {
+	    $submodule_objects = drutex_submodule_objects(NULL);
+		usort($submodule_objects, '_drutex_weight_sort_cmp');
+  		foreach ($submodule_objects as $obj) {
+			if (drutex_submodule_hook($obj->submodule, $hook)) {
+				$result = call_user_func_array("drutex_{$obj->submodule}_{$hook}", $args);
+				if (isset($result) && is_array($result)) {
+					$return = array_merge($return, $result);
+				}
+				else if (isset($result)) {
+					$return[] = $result;
+				}
+			}
+		}
+	  
+  }
+  else{
+   
+   
+   foreach ($filter->settings['drutex_submodules'] as $submodule => $active) {
+		if ($active && drutex_submodule_hook($submodule, $hook)){
+			$result = call_user_func_array("drutex_{$submodule}_{$hook}", $args);
+			if (isset($result) && is_array($result)) {
+				$return = array_merge($return, $result);
+			}
+			else if (isset($result)) {
+				$return[] = $result;
+			}
+		}
+	}
+}
 
   return $return;
 }
@@ -843,12 +915,12 @@ function _drutex_rewrite_format_call(&$args) {
   $last = array_pop($args);
   $matches = array();
 
-  if (is_string($last) && preg_match('/^format=([-]?\d+)$/', $last, $matches)) {
+  if (is_string($last) && preg_match('/^format=(.+)$/', $last, $matches)) {
     return $matches[1];
   }
   else {
     array_push($args, $last);
-    return -1; // no filter
+    return NULL; // no filter
   }
 }
 
@@ -856,5 +928,5 @@ $path = drupal_get_path('module', 'drutex');
 
 /* load the submodules */
 foreach (drutex_submodule_list() as $submodule) {
-  include_once("{$path}/drutex_{$submodule}.inc");
+  include_once DRUPAL_ROOT . '/' . "{$path}/drutex_{$submodule}.inc";
 }
diff --git a/drutex_latex.inc b/drutex_latex.inc
index ac53df4..03346a9 100644
--- a/drutex_latex.inc
+++ b/drutex_latex.inc
@@ -6,19 +6,19 @@
  */
 
 /**
- * Implementation of subhook_info().
+ * Implements hook_info().
  */
 function drutex_latex_info($format = -1) {
   return (object) array(
     'title' => t('LaTeX to HTML'),
     'description' => t('Converts many LaTeX commands and environments to plain HTML.'),
     'toggle' => TRUE,
-    'weight' => 4
+    'weight' => 4,
   );
 }
 
 /**
- * Implementation of subhook_filter_tips().
+ * Implements hook_filter_tips().
  */
 function drutex_latex_filter_tips($delta, $format, $long = FALSE) {
   if (user_access('access latex source')) {
@@ -27,22 +27,22 @@ function drutex_latex_filter_tips($delta, $format, $long = FALSE) {
 }
 
 /**
- * Implementation of subhook_link().
+ * Implements hook_link().
  */
 function drutex_latex_link($type, $node = NULL, $teaser = FALSE) {
   if (user_access('access latex source')) {
-    $latex_link = 'drutex/latex/'. $node->nid;
+    $latex_link = 'drutex/latex/' . $node->nid;
     $text = t('Generate LaTex file');
     $links['drutex_latex_link'] = array(
       'title' => $text,
       'href' => $latex_link,
-      );
+    );
     return $links;
   }
 }
 
 /**
- * Implementation of subhook_defaults().
+ * Implements hook_defaults().
  */
 function drutex_latex_defaults() {
   $D['drutex_latex_active'] = FALSE;
@@ -50,89 +50,89 @@ function drutex_latex_defaults() {
 }
 
 /**
- * Implementation of subhook_node2html().
+ * Implements hook_node2html().
  */
 function drutex_latex_node2html() {
   $E = array();
 
   $E[] = (object) array(
-      'type' => 'latex-command',
-      'pattern' => 'section',
-      'replacement' => '<h2 class="section">$1</h2>'
-    );
+    'type' => 'latex-command',
+    'pattern' => 'section',
+    'replacement' => '<h2 class="section">$1</h2>',
+  );
 
   $E[] = (object) array(
-      'type' => 'latex-command',
-      'pattern' => 'subsection',
-      'replacement' => '<h3 class="subsection">$1</h3>'
-    );
+    'type' => 'latex-command',
+    'pattern' => 'subsection',
+    'replacement' => '<h3 class="subsection">$1</h3>',
+  );
 
   $E[] = (object) array(
-      'type' => 'latex-command',
-      'pattern' => 'minisection',
-      'replacement' => '<h3 class="minisection">$1</h3>'
-    );
+    'type' => 'latex-command',
+    'pattern' => 'minisection',
+    'replacement' => '<h3 class="minisection">$1</h3>',
+  );
 
   $E[] = (object) array(
-      'type' => 'latex-command',
-      'pattern' => 'paragraph',
-      'replacement' => '<h4 class="paragraph">$1</h4>'
-    );
+    'type' => 'latex-command',
+    'pattern' => 'paragraph',
+    'replacement' => '<h4 class="paragraph">$1</h4>',
+  );
 
   $E[] = (object) array(
-      'type' => 'latex-command',
-      'pattern' => 'textbf',
-      'replacement' => '<b>$1</b>'
-    );
+    'type' => 'latex-command',
+    'pattern' => 'textbf',
+    'replacement' => '<b>$1</b>',
+  );
 
   $E[] = (object) array(
-      'type' => 'latex-command',
-      'pattern' => 'textit',
-      'replacement' => '<i>$1</i>'
-    );
+    'type' => 'latex-command',
+    'pattern' => 'textit',
+    'replacement' => '<i>$1</i>',
+  );
 
   $E[] = (object) array(
-      'type' => 'latex-command',
-      'pattern' => 'emph',
-      'replacement' => '<em>$1</em>'
-    );
+    'type' => 'latex-command',
+    'pattern' => 'emph',
+    'replacement' => '<em>$1</em>',
+  );
 
 
   /*
-    regex hacks for:
-      enumeration aka ordered list
-      itemize aka unordered list
-  */
+   regex hacks for:
+   enumeration aka ordered list
+   itemize aka unordered list
+   */
 
   $E[] = (object) array(
-      'pattern' => '@\\\\begin\{enumerate\}@s',
-      'replacement' => '<ol class="enumerate">',
-      'weight' => 100
-    );
+    'pattern' => '@\\\\begin\{enumerate\}@s',
+    'replacement' => '<ol class="enumerate">',
+    'weight' => 100,
+  );
 
   $E[] = (object) array(
-      'pattern' => '@\\\\begin\{itemize\}@s',
-      'replacement' => '<ul class="itemize">',
-      'weight' => 100
-    );
+    'pattern' => '@\\\\begin\{itemize\}@s',
+    'replacement' => '<ul class="itemize">',
+    'weight' => 100,
+  );
 
   $E[] = (object) array(
-      'pattern' => '@\\\\item(.*?)(?=\\\\item|\\\\end\{enumerate\}|\\\\end\{itemize\})@s',
-      'replacement' => "<li>$1</li>",
-      'weight' => 101
-    );
+    'pattern' => '@\\\\item(.*?)(?=\\\\item|\\\\end\{enumerate\}|\\\\end\{itemize\})@s',
+    'replacement' => "<li>$1</li>",
+    'weight' => 101,
+  );
 
   $E[] = (object) array(
-      'pattern' => '@\\\\end\{enumerate\}@s',
-      'replacement' => "</ol>",
-      'weight' => 102
-    );
+    'pattern' => '@\\\\end\{enumerate\}@s',
+    'replacement' => "</ol>",
+    'weight' => 102,
+  );
 
   $E[] = (object) array(
-      'pattern' => '@\\\\end\{itemize\}@s',
-      'replacement' => "</ul>",
-      'weight' => 102
-    );
+    'pattern' => '@\\\\end\{itemize\}@s',
+    'replacement' => "</ul>",
+    'weight' => 102,
+  );
 
   return $E;
 }
diff --git a/drutex_linebreak.inc b/drutex_linebreak.inc
index 23ba82e..e3b1bce 100644
--- a/drutex_linebreak.inc
+++ b/drutex_linebreak.inc
@@ -9,14 +9,14 @@
  */
 
 /**
- * Implementation of subhook_info().
+ * Implements hook_info().
  */
 function drutex_linebreak_info($format = -1) {
   return (object) array(
     'title' => t('Line break converter'),
     'description' => check_plain(t('Converts line breaks into HTML (i.e. <br /> and <p> tags).')),
     'toggle' => TRUE,
-    'weight' => 12
+    'weight' => 12,
   );
 }
 
@@ -24,12 +24,16 @@ function drutex_linebreak_info($format = -1) {
  * Implementation of subhook_filter_tips().
  */
 
+/**
+ * @todo Please document this function.
+ * @see http://drupal.org/node/1354
+ */
 function drutex_linebreak_filter_tips($delta, $format, $long = FALSE) {
   return t('Line and paragraphs break automatically.');
 }
 
 /**
- * Implementation of subhook_defaults().
+ * Implements hook_defaults().
  */
 function drutex_linebreak_defaults() {
   $D['drutex_linebreak_active'] = TRUE;
@@ -39,13 +43,13 @@ function drutex_linebreak_defaults() {
 }
 
 /**
- * Implementation of subhook_node2html_postprocess().
+ * Implements hook_node2html_postprocess().
  */
 function drutex_linebreak_node2html_postprocess($text, $format = -1) {
   $method = drutex_var_get("drutex_linebreak_behaviour_$format");
 
   if ($method == 'drupal') {
-    $text =_filter_autop($text);
+    $text = _filter_autop($text);
   }
   else if ($method == 'latex') {
     $text = preg_replace('/(?<!\n)\n(?!\n)/s', ' ', $text);
@@ -56,18 +60,20 @@ function drutex_linebreak_node2html_postprocess($text, $format = -1) {
 }
 
 /**
- * Implementation of subhook_filter_settings().
+ * Implements hook_filter_settings().
  */
-function drutex_linebreak_filter_settings($format = -1) {
-  $choices = array('drupal' => 'Drupal style',
-                   'latex'  => 'LaTeX style');
+function drutex_linebreak_filter_settings($filter) {
+  $choices = array(
+    'drupal' => 'Drupal style',
+    'latex' => 'LaTeX style',
+  );
 
   $form["drutex_linebreak_behaviour_$format"] = array(
     '#type' => 'select',
     '#title' => t('Linebreaking Method'),
     '#options' => $choices,
     '#default_value' => drutex_var_get("drutex_linebreak_behaviour_$format"),
-    '#description' => t('How to handle new and empty lines in your input.')
+    '#description' => t('How to handle new and empty lines in your input.'),
   );
 
   return $form;
diff --git a/drutex_numbering.inc b/drutex_numbering.inc
index c521986..2bc02cd 100644
--- a/drutex_numbering.inc
+++ b/drutex_numbering.inc
@@ -8,23 +8,27 @@
  */
 
 /**
- * Implementation of subhook_info().
+ * Implements hook_info().
  */
 function drutex_numbering_info($format = -1) {
   return (object) array(
     'title' => t('Numbering / Referencing'),
     'description' => t('Assists automatic numbering of tex, equation und equations environments.'),
     'toggle' => FALSE,
-    'weight' => 20
+    'weight' => 20,
   );
 }
 
+/**
+ * @todo Please document this function.
+ * @see http://drupal.org/node/1354
+ */
 function drutex_numbering_filter_tips($delta, $format, $long = FALSE) {
   return t('Assists automatic numbering of tex, equation, and equations environments.');
 }
 
 /**
- * Implementation of subhook_defaults().
+ * Implements hook_defaults().
  */
 function drutex_numbering_defaults() {
   $D['drutex_numbering_active'] = TRUE;
@@ -32,28 +36,28 @@ function drutex_numbering_defaults() {
 }
 
 /**
- * Implementation of subhook_node2html().
+ * Implements hook_node2html().
  */
 function drutex_numbering_node2html() {
   $E = array();
 
   $E[] = (object) array(
-      'pattern' => '@<(equation|equations)( [^>]*)>@se',
-      'replacement' => "'<$1 ' . _drutex_numbering_rewrite_attributes(_drutex_unescape('$2')) . '>'",
-      'weight' => -90 /* very early, but after drutex_verbatim.inc */
-    );
+    'pattern' => '@<(equation|equations)( [^>]*)>@se',
+    'replacement' => "'<$1 ' . _drutex_numbering_rewrite_attributes(_drutex_unescape('$2')) . '>'",
+    'weight' => -90 /* very early, but after drutex_verbatim.inc */,
+  );
 
   $E[] = (object) array(
-      'pattern' => '@\(\\\\ref\{(.+?)\}\)@se',
-      'replacement' => "drutex_reference_link($1, '(', ')')",
-      'weight' => 90 /* very late */
-    );
+    'pattern' => '@\(\\\\ref\{(.+?)\}\)@se',
+    'replacement' => "drutex_reference_link($1, '(', ')')",
+    'weight' => 90 /* very late */,
+  );
 
   $E[] = (object) array(
-      'pattern' => '@\\\\ref\{(.+?)\}@se',
-      'replacement' => "drutex_reference_link($1)",
-      'weight' => 91 /* very late */
-    );
+    'pattern' => '@\\\\ref\{(.+?)\}@se',
+    'replacement' => "drutex_reference_link($1)",
+    'weight' => 91 /* very late */,
+  );
 
   return $E;
 }
@@ -103,6 +107,10 @@ function _drutex_references($action, $id = '', $name = '') {
   }
 }
 
+/**
+ * @todo Please document this function.
+ * @see http://drupal.org/node/1354
+ */
 function drutex_reference_link($id, $prepend = '', $append = '') {
-  return "<a href=\"#$id\">{$prepend}". _drutex_references('get name by id', $id) ."{$append}</a>";
+  return "<a href=\"#$id\">{$prepend}" . _drutex_references('get name by id', $id) . "{$append}</a>";
 }
diff --git a/drutex_pdf.inc b/drutex_pdf.inc
index 15bd761..3f3dd5d 100644
--- a/drutex_pdf.inc
+++ b/drutex_pdf.inc
@@ -8,19 +8,19 @@
  */
 
 /**
- * Implementation of subhook_info().
+ * Implements hook_info().
  */
 function drutex_pdf_info($format = -1) {
   return (object) array(
     'title' => t('PDF Generator'),
     'description' => t('Allows to generate pdf-versions of a node (with decent html2latex features).'),
     'toggle' => TRUE,
-    'weight' => 6
+    'weight' => 6,
   );
 }
 
 /**
- * Implementation of subhook_filter_tips().
+ * Implements hook_filter_tips().
  */
 function drutex_pdf_filter_tips($delta, $format, $long = FALSE) {
   if (user_access('access pdf files')) {
@@ -29,22 +29,22 @@ function drutex_pdf_filter_tips($delta, $format, $long = FALSE) {
 }
 
 /**
- * Implementation of subhook_link().
+ * Implements hook_link().
  */
 function drutex_pdf_link($type, $node = NULL, $teaser = FALSE) {
   if (user_access('access pdf files')) {
-    $pdf_link = 'drutex/pdf/'. $node->nid;
+    $pdf_link = 'drutex/pdf/' . $node->nid;
     $text = t('Generate PDF file');
     $links['drutex_pdf_link'] = array(
       'title' => $text,
       'href' => $pdf_link,
-      );
+    );
     return $links;
   }
 }
 
 /**
- * Implementation of subhook_defaults().
+ * Implements hook_defaults().
  */
 function drutex_pdf_defaults() {
   $D['drutex_pdf_active'] = TRUE;
@@ -52,31 +52,33 @@ function drutex_pdf_defaults() {
   /* relative to drutex/templates/pdf */
   $D['drutex_template_pdf'] = 'plain.tex';
 
-  $D['drutex_pattern_pdflatex']  = 'cd [TMP_DIR]; TEXINPUTS="[DRUTEX_DIR]//:" pdflatex -interaction=batchmode [NAME].tex'."\n".
+  $D['drutex_pattern_pdflatex']  = 'cd [TMP_DIR]; TEXINPUTS="[DRUTEX_DIR]//:" pdflatex -interaction=batchmode [NAME].tex' . "\n" .
                                       'cp [TMP_DIR]/[NAME].pdf [IMG_DIR]/[NAME].pdf';
   return $D;
 }
 
 /**
- * Implementation of subhook_filter_settings().
+ * Implements hook_filter_settings().
  */
-function drutex_pdf_filter_settings($format = -1) {
+function drutex_pdf_filter_settings($filter) {
   /* conversion methods */
-  $conversions = array('dvipng'        => 'dvipng',
-                       'imagemagick'   => 'ImageMagick (convert)',
-                       'custom'        => 'custom');
+  $conversions = array(
+    'dvipng' => 'dvipng',
+    'imagemagick' => 'ImageMagick (convert)',
+    'custom' => 'custom',
+  );
 
   $form["drutex_template_pdf_$format"] = array(
-      '#type' => 'select',
-      '#title' => t('Template'),
-      '#options' => _drutex_pdf_get_templates(),
-      '#default_value' => drutex_var_get("drutex_template_pdf_$format")
+    '#type' => 'select',
+    '#title' => t('Template'),
+    '#options' => _drutex_pdf_get_templates(),
+    '#default_value' => drutex_var_get("drutex_template_pdf_$format"),
   );
 
   /* Conversion Command */
 
   /* description for <conversion command> */
-  $description = t('* Every line is executed in sequence, but in its own shell (so path changes aren\'t inherited).') .'<br />'
+  $description = t('* Every line is executed in sequence, but in its own shell (so path changes aren\'t inherited).') . '<br />'
     . t('Placeholders available:<br />
         [NAME] - name of the tex/pdf<br />
         [TMP_DIR] - temporary dir (automatically cleaned)<br />
@@ -90,7 +92,7 @@ function drutex_pdf_filter_settings($format = -1) {
     '#rows' => 3,
     '#cols' => 50,
     '#default_value' => drutex_var_get("drutex_pattern_pdflatex_$format"),
-    '#description' => $description
+    '#description' => $description,
   );
 
   return $form;
@@ -108,11 +110,11 @@ function drutex_node2pdf_wrapper($nid) {
   global $base_url;
   $node = node_load($nid);
   $pdf_dir = drutex_var_get("drutex_dir_images_{$node->format}");
-  $pdf_file = $pdf_dir .'/'. $node->nid .'.pdf';
+  $pdf_file = $pdf_dir . '/' . $node->nid . '.pdf';
   if (!is_file($pdf_file)) {
     drutex_node2pdf($nid);
   }
-  drupal_goto($base_url .'/'. $pdf_file);
+  drupal_goto($base_url . '/' . $pdf_file);
 }
 
 /**
@@ -132,11 +134,11 @@ function drutex_node2pdf($nid) {
 
   /* create temporary dir */
   $temporary_dir = _drutex_create_temporary_dir();
-  $file = $node->nid .'.tex';
-  $temporary_file = $temporary_dir .'/'. $file;
-  $source_file = $image_dir .'/'. $file;
+  $file = $node->nid . '.tex';
+  $temporary_file = $temporary_dir . '/' . $file;
+  $source_file = $image_dir . '/' . $file;
   file_copy($source_file, $temporary_file);
-  $pdf_template_path = drupal_get_path('module', 'drutex') .'/templates/pdf';
+  $pdf_template_path = drupal_get_path('module', 'drutex') . '/templates/pdf';
   _drutex_copy_dir($pdf_template_path, $temporary_dir);
 
   /*
@@ -146,8 +148,10 @@ function drutex_node2pdf($nid) {
 
   /* replacement array */
   $map = array(
-    '[NAME]' => $node->nid, '[TMP_DIR]' => $temporary_dir, '[IMG_DIR]' => $image_dir,
-    '[DRUTEX_DIR]' => drutex_var_get('drutex_dir')
+    '[NAME]' => $node->nid,
+    '[TMP_DIR]' => $temporary_dir,
+    '[IMG_DIR]' => $image_dir,
+    '[DRUTEX_DIR]' => drutex_var_get('drutex_dir'),
   );
 
   /* conversion commands (seperated by \n) */
@@ -190,12 +194,12 @@ function drutex_node2latex_wrapper($nid) {
   global $base_url;
   $node = node_load($nid);
   $pdf_dir = drutex_var_get("drutex_dir_images_{$node->format}");
-  $tex_file = $pdf_dir .'/'. $node->nid .'.tex';
+  $tex_file = $pdf_dir . '/' . $node->nid . '.tex';
   if (!is_file($tex_file)) {
     drutex_node2latex($nid);
   }
 
-  drupal_goto($base_url .'/'. $tex_file);
+  drupal_goto($base_url . '/' . $tex_file);
 }
 
 /**
@@ -213,7 +217,7 @@ function drutex_node2latex($nid) {
 
   /* get the pdf template file path (it's a tex file) */
   $pdf_template_file = drutex_var_get('drutex_dir')
-    .'/templates/pdf/'. drutex_var_get("drutex_template_pdf_{$node->format}");
+    . '/templates/pdf/' . drutex_var_get("drutex_template_pdf_{$node->format}");
 
   /* read this file into buffer */
   $handle = fopen($pdf_template_file, 'r');
@@ -222,13 +226,13 @@ function drutex_node2latex($nid) {
 
   /* convert html elements in the node's content to latex */
   $content = drutex_html2latex($node);
-//  print $content;
+  //  print $content;
   /* replace the template keys by the actual values */
   $map = array(
     'DRUTEX_NODE_TITLE' => $node->title,
     'DRUTEX_NODE_URL' => url("node/$node->nid", array('absolute' => TRUE)),
     'DRUTEX_DIR' => drutex_var_get('drutex_dir'),
-    'DRUTEX_NODE_BODY' => $content
+    'DRUTEX_NODE_BODY' => $content,
   );
 
   $text = str_replace(array_keys($map), $map, $pdf_template_content);
@@ -257,7 +261,7 @@ function drutex_html2latex(&$node) {
 
   /* include the rules file */
   $drutex_path = drupal_get_path('module', 'drutex');
-  require_once("$drutex_path/drutex_pdf.rules");
+  require_once DRUPAL_ROOT . '/' . "$drutex_path/drutex_pdf.rules";
 
   /* get entities */
   $A = drutex_submodule_invoke_all('drutex2latex', $node, "format=$format");
@@ -276,7 +280,7 @@ function drutex_html2latex(&$node) {
 
 
 /**
- * Implementation of hook_nodeapi().
+ * Implements hook_nodeapi().
  */
 function drutex_pdf_nodeapi(&$node, $op, $teaser = FALSE, $page = FALSE) {
   if (TRUE) {
@@ -292,8 +296,8 @@ function drutex_pdf_nodeapi(&$node, $op, $teaser = FALSE, $page = FALSE) {
       case 'update':
       case 'delete':
         $pdf_dir = drutex_var_get("drutex_dir_images_{$node->format}");
-        $pdf_file = $pdf_dir .'/'. $node->nid .'.pdf';
-        $tex_file = $pdf_dir .'/'. $node->nid .'.tex';
+        $pdf_file = $pdf_dir . '/' . $node->nid . '.pdf';
+        $tex_file = $pdf_dir . '/' . $node->nid . '.tex';
         file_delete($pdf_file);
         file_delete($tex_file);
         break;
@@ -302,7 +306,7 @@ function drutex_pdf_nodeapi(&$node, $op, $teaser = FALSE, $page = FALSE) {
 }
 
 /**
- * Implementation of hook_perm().
+ * Implements hook_perm().
  */
 function drutex_pdf_perm() {
   return array('access pdf files', 'access latex source');
@@ -312,13 +316,13 @@ function drutex_pdf_perm() {
  * Get a list with templates for drutex_pdf.
  */
 function _drutex_pdf_get_templates() {
-  $dir = drupal_get_path('module', 'drutex') .'/templates/pdf';
+  $dir = drupal_get_path('module', 'drutex') . '/templates/pdf';
 
-  $A = file_scan_directory($dir, '.*\.tex');
+  $A = file_scan_directory($dir, '/.*\.tex/');
   $B = array();
 
   foreach ($A as $key => $val) {
-    $key = substr($key, strlen($dir)+1);
+    $key = substr($key, strlen($dir) + 1);
     $B[$key] = $key;
   }
 
diff --git a/drutex_remote.inc b/drutex_remote.inc
index c569936..b2a39d7 100644
--- a/drutex_remote.inc
+++ b/drutex_remote.inc
@@ -6,19 +6,19 @@
  */
 
 /**
- * Implementation of subhook_info().
+ * Implements hook_info().
  */
-function drutex_remote_info($format = -1) {
+function drutex_remote_info($filter) {
   return (object) array(
     'title' => t('Remote LaTeX Renderer'),
     'description' => t('Provides different environments to create rendered (remotely) images (especially maths).'),
     'toggle' => TRUE,
-    'weight' => 2
+    'weight' => 2,
   );
 }
 
 /**
- * Implementation of subhook_defaults().
+ * Implements hook_defaults().
  */
 function drutex_remote_defaults() {
   $D['drutex_remote_active'] = FALSE;
@@ -26,90 +26,90 @@ function drutex_remote_defaults() {
 }
 
 /**
- * Implementation of subhook_node2html().
+ * Implements hook_node2html().
  */
 function drutex_remote_node2html() {
   $E = array();
 
   /* Plain TeX environment */
   $E[] = (object) array(
-      'pattern' => '@<tex( [^>]*)?>(.+?)</tex>@se',
-      'replacement' => "drutex_remote('$2', '<var>format</var>', '$1', 'tag=\"span\" class=\"plaintex\"')",
-      'weight' => -10
-    );
+    'pattern' => '@<tex( [^>]*)?>(.+?)</tex>@se',
+    'replacement' => "drutex_remote('$2', '<var>filter</var>', '$1', 'tag=\"span\" class=\"plaintex\"')",
+    'weight' => -10,
+  );
 
   /* <equation> environment */
   $E[] = (object) array(
-      'pattern' => '@<equation( [^>]*)?>(.+?)</equation>@se',
-      'replacement' => "drutex_remote('\[ $2 \]', '<var>format</var>', '$1', 'tag=\"table\" class=\"displaymath\"')",
-      'weight' => -7
-    );
+    'pattern' => '@<equation( [^>]*)?>(.+?)</equation>@se',
+    'replacement' => "drutex_remote('\[ $2 \]', '<var>filter</var>', '$1', 'tag=\"table\" class=\"displaymath\"')",
+    'weight' => -7,
+  );
 
   /* <equations> environment */
   $E[] = (object) array(
-      'pattern' => '@<equations( [^>]*)?>(.+?)</equations>@se',
-      'replacement' => "drutex_remote('\begin{align*} $2 \end{align*}', '<var>format</var>', '$1', 'tag=\"table\" class=\"displaymath\"')",
-      'weight' => -6
-    );
+    'pattern' => '@<equations( [^>]*)?>(.+?)</equations>@se',
+    'replacement' => "drutex_remote('\begin{align*} $2 \end{align*}', '<var>filter</var>', '$1', 'tag=\"table\" class=\"displaymath\"')",
+    'weight' => -6,
+  );
 
   /* Paragraph math between $$ and $$ */
   $E[] = (object) array(
-      'pattern' => '@(^|[^\\\\])(\$\$.*?[^\\\\]\$\$)@se',
-      'replacement' => "'$1' . drutex_remote('$2', '<var>format</var>', '', 'tag=\"table\" class=\"displaymath\"')",
-      'weight' => -5
-    );
+    'pattern' => '@(^|[^\\\\])(\$\$.*?[^\\\\]\$\$)@se',
+    'replacement' => "'$1' . drutex_remote('$2', '<var>filter</var>', '', 'tag=\"table\" class=\"displaymath\"')",
+    'weight' => -5,
+  );
 
   /* Paragraph math between \[ and \] */
   $E[] = (object) array(
-      'pattern' => '@\\\\\\[(.+?)\\\\\\]@se',
-      'replacement' => "drutex_remote('$0', '<var>format</var>', '', 'tag=\"table\" class=\"displaymath\"')",
-      'weight' => -5
-    );
+    'pattern' => '@\\\\\\[(.+?)\\\\\\]@se',
+    'replacement' => "drutex_remote('$0', '<var>filter</var>', '', 'tag=\"table\" class=\"displaymath\"')",
+    'weight' => -5,
+  );
 
   /* Inline math (display style) between $! and $ */
   $E[] = (object) array(
-      'pattern' => '@(^|[^\\\\])\$!(.*?[^\\\\])\$@se',
-      'replacement' => "'$1' . drutex_remote('$\displaystyle $2 $', '<var>format</var>')",
-      'weight' => -4
-    );
+    'pattern' => '@(^|[^\\\\])\$!(.*?[^\\\\])\$@se',
+    'replacement' => "'$1' . drutex_remote('$\displaystyle $2 $', '<var>filter</var>')",
+    'weight' => -4,
+  );
 
   /* Inline math between $ and $ */
   $E[] = (object) array(
-      'pattern' => '@(^|[^\\\\])\$(.*?[^\\\\])\$@se',
-      'replacement' => "'$1' . drutex_remote('$ $2 $', '<var>format</var>')",
-      'weight' => -3
-    );
+    'pattern' => '@(^|[^\\\\])\$(.*?[^\\\\])\$@se',
+    'replacement' => "'$1' . drutex_remote('$ $2 $', '<var>filter</var>')",
+    'weight' => -3,
+  );
 
   /* unescape escaped dollar signs */
   $E[] = (object) array(
-      'pattern' => '@\\\\\\$@s',
-      'replacement' => '$',
-      'weight' => 1000 /*  very late */
-    );
+    'pattern' => '@\\\\\\$@s',
+    'replacement' => '$',
+    'weight' => 1000 /*  very late */,
+  );
 
   return $E;
 }
 
 /**
- * Implementation of subhook_filter_settings().
+ * Implements hook_filter_settings().
  */
-function drutex_remote_filter_settings($format = -1) {
+function drutex_remote_filter_settings($filter) {
   $form = array();
 
-  $form["drutex_server_remote_$format"] = array(
-      '#type' => 'textfield',
-      '#title' => t('Remote server path'),
-      '#description' => t('The address of the remote server that will do the rendering. Should include the path to the script that will complete the rendering, i.e. end in drutex/render'),
-      '#default_value' => drutex_var_get("drutex_server_remote_$format"),
-    );
+  $form["drutex_server"] = array(
+    '#type' => 'textfield',
+    '#title' => t('Remote server path'),
+    '#description' => t('The address of the remote server that will do the rendering. Should include the path to the script that will complete the rendering, i.e. end in drutex/render'),
+    '#default_value' => $filter->settings['drutex_remote']['drutex_server'],
+  );
 
-  $form["drutex_dpi_remote_$format"] = array(
+  $form["drutex_dpi"] = array(
     '#type' => 'textfield',
     '#title' => t('Resolution (DPI)'),
     '#size' => 15,
     '#maxlength' => 3,
-    '#default_value' => drutex_var_get("drutex_dpi_remote_$format"),
-    '#description' => t('100 is small, 107 is default, 115 is big')
+    '#default_value' => $filter->settings['drutex_remote']['drutex_dpi'],
+    '#description' => t('100 is small, 107 is default, 115 is big'),
   );
 
   return $form;
@@ -118,12 +118,12 @@ function drutex_remote_filter_settings($format = -1) {
 /**
  * Renders $text in LaTeX.
  */
-function drutex_remote($text, $format = -1, $attributes = '', $default_attributes = '') {
+function drutex_remote($text, $filter, $attributes = '', $default_attributes = '') {
 
   $text = _drutex_unescape($text);
-
-  if (drutex_submodule_is_active('security', $format)) {
-    if (drutex_security($text, $format) == FALSE) {
+  
+    if ($filter->settings['drutex_submodules']['security']) {
+    if (drutex_security($text, $filter) == FALSE) {
       return '<em class="error">Unallowed command detected!</em>';
     }
   }
@@ -133,15 +133,19 @@ function drutex_remote($text, $format = -1, $attributes = '', $default_attribute
   $attributes = array_merge($default_attributes, $attributes);
 
 
-  $image_dir = drutex_var_get("drutex_dir_images_$format");
 
-  $dpi = drutex_var_get("drutex_dpi_remote_$format");
+
+  $image_dir = $filter->settings['drutex_base']['drutex_dir_images'];
+
+  $dpi = $filter->settings['drutex_remote']['drutex_dpi'];
+
+
 
   if (!empty($attributes['dpi']) AND is_numeric($attributes['dpi']) AND $attributes['dpi'] > 0) {
     $dpi = $attributes['dpi'];
   }
 
-  $image_type = drutex_var_get("drutex_imagetype_$format");
+  $image_type = $filter->settings['drutex_imagetype']; //TODO : check the correct setting;
 
   $hash = sha1($text . $displaystyle . $dpi);
   $image_file = "$image_dir/$hash.$image_type";
@@ -153,15 +157,12 @@ function drutex_remote($text, $format = -1, $attributes = '', $default_attribute
 
     // Need to curl to the remote url, sending the variables $text, $dpi, $displaystyle
     $data = array(
-        'text' => $text,
-        'dpi' => $dpi,
-        'displaystyle' => $displaystyle,
-      );
+      'text' => $text,
+      'dpi' => $dpi,
+      'displaystyle' => $displaystyle,
+    );
     $response = drupal_http_request(
-        drutex_var_get("drutex_server_remote_$format"),
-        array('Content-Type' => 'application/x-www-form-urlencoded'),
-        'POST',
-        http_build_query($data, '', '&'));
+        $filter->settings['drutex_remote']["drutex_server"], array('headers' => array('Content-Type' => 'application/x-www-form-urlencoded'), 'method' => 'POST', 'data' => http_build_query($data, '', '&')));
     if ($response->code == 200) {
       // We get the image back from the server.
       $errorcode = file_save_data($response->data, $image_file, FILE_EXISTS_REPLACE);
@@ -186,7 +187,7 @@ function drutex_remote($text, $format = -1, $attributes = '', $default_attribute
     }
   }
 
-  $img_url = drutex_get_image_url($format) ."/$hash.$image_type";
+  $img_url = drutex_get_image_url($filter) . "/$hash.$image_type";
 
   if ($success) {
     $img_alt = _drutex_hide('set', check_plain($text));
@@ -222,31 +223,35 @@ function drutex_remote($text, $format = -1, $attributes = '', $default_attribute
   return $res;
 }
 
-if(!function_exists('http_build_query')) {
-  function http_build_query($data, $prefix=NULL, $sep='', $key='') {
+if (!function_exists('http_build_query')) {
+  function http_build_query($data, $prefix = NULL, $sep = '', $key = '') {
     $ret = array();
     foreach ($data as $k => $v) {
       $k = urlencode($k);
       if (is_int($k) && $prefix != NULL) {
         $k = $prefix . $k;
-      };
+      }
       if (!empty($key)) {
-        $k    = $key ."[". $k ."]";
-      };
+        $k    = $key . "[" . $k . "]";
+      }
       if (is_array($v) || is_object($v)) {
         array_push($ret, http_build_query($v, "", $sep, $k));
       }
       else {
-        array_push($ret, $k ."=". urlencode($v));
-      };
-    };
+        array_push($ret, $k . "=" . urlencode($v));
+      }
+    }
     if (empty($sep)) {
       $sep = ini_get("arg_separator.output");
-    };
+    }
     return implode($sep, $ret);
-  };
-};
+  }
+}
 
+/**
+ * @todo Please document this function.
+ * @see http://drupal.org/node/1354
+ */
 function drutex_remote_do_render() {
 
   if (variable_get('drutex_remote_rendering_enabled', 0) == 1) {
@@ -267,14 +272,14 @@ function drutex_remote_do_render() {
       if (isset($ips)) {
         $ip = ip_first($ips);
         $ipnum = ip2long($ip);
-          if ($ipnum !== -1 && $ipnum !== FALSE && (long2ip($ipnum) === $ip)) { // PHP 4 and PHP 5
-            if (($ipnum < 167772160   || $ipnum >   184549375) && // Not in 10.0.0.0/8
+        if ($ipnum !== -1 && $ipnum !== FALSE && (long2ip($ipnum) === $ip)) { // PHP 4 and PHP 5
+          if (($ipnum < 167772160   || $ipnum >   184549375) && // Not in 10.0.0.0/8
                 ($ipnum < -1408237568 || $ipnum > -1407188993) && // Not in 172.16.0.0/12
-                ($ipnum < -1062731776 || $ipnum > -1062666241)) {   // Not in 192.168.0.0/16
-              return TRUE;
-            }
+                ($ipnum < -1062731776 || $ipnum > -1062666241)) { // Not in 192.168.0.0/16
+            return TRUE;
           }
         }
+      }
       return FALSE;
     }
 
@@ -310,12 +315,12 @@ function drutex_remote_do_render() {
       // Get the variable and do the render:
       $text = $_REQUEST['text'];
       $dpi = $_REQUEST['dpi'];
-      $template_dir = drutex_var_get('drutex_dir') .'/templates/render';
+      $template_dir = drutex_var_get('drutex_dir') . '/templates/render';
       $template_file = variable_get('drutex_remote_render_template', 'default.tex');
-      $template = $template_dir .'/'. $template_file;
-      $hash = sha1('latex_image'. $text . $dpi);
+      $template = $template_dir . '/' . $template_file;
+      $hash = sha1('latex_image' . $text . $dpi);
       $temporary_dir = _drutex_create_temporary_dir();
-      $image_file = $temporary_dir .'/'. $hash .'.png';
+      $image_file = $temporary_dir . '/' . $hash . '.png';
 
       /* conversion method */
       $conversion = variable_get('drutex_remote_render_conversion', 'dvipng');
@@ -324,9 +329,12 @@ function drutex_remote_do_render() {
       $pattern_convert = variable_get('drutex_remote_render_custom_pattern', '');
 
       /* replacement arrays */
-      $map = array('[TMP_DIR]' => $temporary_dir, '[IMG_FILE]' => $image_file,
-        '[DPI]' => $dpi, '[HASH]' => $hash,
-        '[DRUTEX_DIR]' => drutex_var_get('drutex_dir')
+      $map = array(
+        '[TMP_DIR]' => $temporary_dir,
+        '[IMG_FILE]' => $image_file,
+        '[DPI]' => $dpi,
+        '[HASH]' => $hash,
+        '[DRUTEX_DIR]' => drutex_var_get('drutex_dir'),
       );
 
       /* conversion commands (seperated by \n) */
@@ -364,7 +372,7 @@ function drutex_remote_do_render() {
           fclose($fd);
         }
         else {
-        drupal_not_found();
+          drupal_not_found();
         }
       }
       /* remove temporary dir */
@@ -392,7 +400,7 @@ function drutex_remote_do_render() {
     drupal_access_denied();
   }
 
-exit();
+  exit();
 
 }
 
@@ -400,30 +408,36 @@ exit();
  * DruTex Admin Remote Settings page.
  */
 
-function drutex_remote_admin_settings() {
+/**
+ * @todo Please document this function.
+ * @see http://drupal.org/node/1354
+ */
+function drutex_remote_admin_settings($form, &$form_state) {
   /* conversion methods */
-  $conversions = array('dvipng'        => 'dvipng',
-                       'imagemagick'   => 'ImageMagick (convert)',
-                       'custom'        => 'custom');
+  $conversions = array(
+    'dvipng' => 'dvipng',
+    'imagemagick' => 'ImageMagick (convert)',
+    'custom' => 'custom',
+  );
 
   $form['remote_fieldset'] = array(
-      '#type' => 'fieldset',
-      '#title' => t('Remote rendering settings'),
-      '#collapsible' => TRUE,
-    );
+    '#type' => 'fieldset',
+    '#title' => t('Remote rendering settings'),
+    '#collapsible' => TRUE,
+  );
 
   $form['remote_fieldset']['drutex_remote_rendering_enabled'] = array(
-      '#type' => 'checkbox',
-      '#title' => t('Allow remote LaTeX rendering on THIS server'),
-      '#default_value' => variable_get('drutex_remote_rendering_enabled', 0),
-    );
+    '#type' => 'checkbox',
+    '#title' => t('Allow remote LaTeX rendering on THIS server'),
+    '#default_value' => variable_get('drutex_remote_rendering_enabled', 0),
+  );
 
   $form['remote_fieldset']['drutex_remote_allowed_ips'] = array(
-      '#type' => 'textarea',
-      '#title' => t('Allowed remote IPs'),
-      '#description' => t('Put the address of each remote IP that is allowed to render LaTeX on this server.'."<br />".'Put each address on a new line.'."<br />".'You may use * as a wildcard character.'."<br />".'e.g. 10.0.0.5, or 192.168.*.*'),
-      '#default_value' => variable_get('drutex_remote_allowed_ips', ''),
-    );
+    '#type' => 'textarea',
+    '#title' => t('Allowed remote IPs'),
+    '#description' => t('Put the address of each remote IP that is allowed to render LaTeX on this server.' . "<br />" . 'Put each address on a new line.' . "<br />" . 'You may use * as a wildcard character.' . "<br />" . 'e.g. 10.0.0.5, or 192.168.*.*'),
+    '#default_value' => variable_get('drutex_remote_allowed_ips', ''),
+  );
 
 
   /* determine whether temporary dir is writeable */
@@ -436,33 +450,33 @@ function drutex_remote_admin_settings() {
     '#maxlength' => 100,
     '#default_value' => drutex_var_get('drutex_dir_temporary'),
     '#description' => t('Directory for temporaray actions. Has to be writable by apache.'),
-    '#attributes' => $is_writable ? array() : array('style' => 'border-color:red')
+    '#attributes' => $is_writable ? array() : array('style' => 'border-color:red'),
   );
 
 
 
   $form['remote_fieldset']['drutex_remote_render_template'] = array(
-      '#type' => 'select',
-      '#title' => t('Template'),
-      '#options' => _drutex_get_templates(),
-      '#default_value' => variable_get('drutex_remote_render_template', 'default.tex')
+    '#type' => 'select',
+    '#title' => t('Template'),
+    '#options' => _drutex_get_templates(),
+    '#default_value' => variable_get('drutex_remote_render_template', 'default.tex'),
   );
 
   $form['remote_fieldset']['drutex_remote_render_conversion'] = array(
     '#type' => 'select',
     '#title' => t('Conversion Method'),
     '#options' => $conversions,
-    '#default_value' => variable_get('drutex_remote_render_conversion', 'dvipng')
+    '#default_value' => variable_get('drutex_remote_render_conversion', 'dvipng'),
   );
 
   /* Custom Conversion Method */
 
   /* determine default value for <custom conversion method> */
-  $default_value = variable_get('drutex_remote_render_custom_pattern', 'cd [TMP_DIR]; TEXINPUTS="[DRUTEX_DIR]//:" latex -interaction=batchmode [HASH].tex'."\n".
+  $default_value = variable_get('drutex_remote_render_custom_pattern', 'cd [TMP_DIR]; TEXINPUTS="[DRUTEX_DIR]//:" latex -interaction=batchmode [HASH].tex' . "\n" .
       'dvipng -o [IMG_FILE] -D [DPI] -T tight [TMP_DIR]/[HASH].dvi');
 
   /* description for <custom conversion method> */
-  $description = t('* Leave blank and select dvipng or ImageMagick, to display a template for one of these commands in this box.') .'<br />'. t('* Every line is executed in sequence, but in its own shell (so path changes aren\'t inherited).') .'<br />'. t('Placeholders available:<br />
+  $description = t('* Leave blank and select dvipng or ImageMagick, to display a template for one of these commands in this box.') . '<br />' . t('* Every line is executed in sequence, but in its own shell (so path changes aren\'t inherited).') . '<br />' . t('Placeholders available:<br />
         [HASH] - hash (name) for the image<br />
         [TMP_DIR] - temporary dir (automatically cleaned)<br />
         [DPI] - dots per inch (see above)<br />
diff --git a/drutex_render.inc b/drutex_render.inc
index 62d5b28..b75fcf3 100644
--- a/drutex_render.inc
+++ b/drutex_render.inc
@@ -6,14 +6,14 @@
  */
 
 /**
- * Implementation of subhook_info().
+ * Implements hook_info().
  */
-function drutex_render_info($format = -1) {
+function drutex_render_info($filter) {
   return (object) array(
     'title' => t('LaTeX Renderer'),
     'description' => t('Provides different environments to create rendered images (especially maths).'),
     'toggle' => TRUE,
-    'weight' => 0
+    'weight' => 0,
   );
 }
 
@@ -21,154 +21,162 @@ function drutex_render_info($format = -1) {
  * Implementation of subhook_filter_tips().
  */
 
-function drutex_render_filter_tips($delta, $format, $long = FALSE) {
+/**
+ * @todo Please document this function.
+ * @see http://drupal.org/node/1354
+ */
+function drutex_render_filter_tips($delta, $filter, $long = FALSE) {
   return t('Provides different environments to create rendered images (especially maths).');
 }
 
 /**
- * Implementation of subhook_defaults().
+ * Implements hook_defaults().
  */
 function drutex_render_defaults() {
   $D['drutex_render_active'] = TRUE;
 
   /* relative to drutex/templates/render */
-  $D['drutex_template_render'] = 'default.tex';
+  $D['drutex_template'] = 'default.tex';
 
-  $D['drutex_pattern_render_dvipng']           = 'cd [TMP_DIR]; TEXINPUTS="[DRUTEX_DIR]//:" latex -interaction=batchmode [HASH].tex'."\n".
+  $D['drutex_pattern_dvipng']           = 'cd [TMP_DIR]; TEXINPUTS="[DRUTEX_DIR]//:" latex -interaction=batchmode [HASH].tex' . "\n" .
                                       'dvipng -o [IMG_FILE] -D [DPI] -T tight [TMP_DIR]/[HASH].dvi';
 
-  $D['drutex_pattern_render_imagemagick']      = 'cd [TMP_DIR]; TEXINPUTS="[DRUTEX_DIR]//:" latex -interaction=batchmode [HASH].tex'."\n".
+  $D['drutex_pattern_imagemagick']      = 'cd [TMP_DIR]; TEXINPUTS="[DRUTEX_DIR]//:" latex -interaction=batchmode [HASH].tex' . "\n" .
                                       'convert -density [DPI] -trim [TMP_DIR]/[HASH].dvi [IMG_FILE]';
 
-  $D['drutex_pattern_render_dvipng_trans']      = 'cd [TMP_DIR]; TEXINPUTS="[DRUTEX_DIR]//:" latex -interaction=batchmode [HASH].tex'."\n".
+  $D['drutex_pattern_dvipng_trans']      = 'cd [TMP_DIR]; TEXINPUTS="[DRUTEX_DIR]//:" latex -interaction=batchmode [HASH].tex' . "\n" .
                                       'dvipng -o [IMG_FILE] -D [DPI] -T tight -bg Transparent [TMP_DIR]/[HASH].dvi';
 
-  $D['drutex_pattern_render_imagemagick_trans'] = 'cd [TMP_DIR]; TEXINPUTS="[DRUTEX_DIR]//:" latex -interaction=batchmode [HASH].tex'."\n".
+  $D['drutex_pattern_imagemagick_trans'] = 'cd [TMP_DIR]; TEXINPUTS="[DRUTEX_DIR]//:" latex -interaction=batchmode [HASH].tex' . "\n" .
                                       'convert -density [DPI] -trim -transparent "#FFFFFF" -antialias +repage [TMP_DIR]/[HASH].dvi [IMG_FILE]';
 
-  $D['drutex_pattern_render_dvipng_win32']      = 'cd [TMP_DIR] & latex -interaction=batchmode [HASH].tex'."\n".
+  $D['drutex_pattern_dvipng_win32']      = 'cd [TMP_DIR] & latex -interaction=batchmode [HASH].tex' . "\n" .
                                       'dvipng -o [IMG_FILE] -D [DPI] -T tight [TMP_DIR]/[HASH].dvi';
 
-  $D['drutex_pattern_render_imagemagick_win32'] = 'cd [TMP_DIR] & latex -interaction=batchmode [HASH].tex'."\n".
+  $D['drutex_pattern_imagemagick_win32'] = 'cd [TMP_DIR] & latex -interaction=batchmode [HASH].tex' . "\n" .
                                       'convert -density [DPI] -trim [TMP_DIR]/[HASH].dvi [IMG_FILE]';
 
   return $D;
 }
 
 /**
- * Implementation of subhook_node2html().
+ * Implements hook_node2html().
  */
 function drutex_render_node2html() {
   $E = array();
 
   /* Plain TeX environment */
   $E[] = (object) array(
-      'pattern' => '@<tex( [^>]*)?>(.+?)</tex>@se',
-      'replacement' => "drutex_render('$2', '<var>format</var>', '$1', 'tag=\"span\" class=\"plaintex\"')",
-      'weight' => -10
-    );
+    'pattern' => '@<tex( [^>]*)?>(.+?)</tex>@se',
+    'replacement' => "drutex_render('$2', $'<var>filter</var>', '$1', 'tag=\"span\" class=\"plaintex\"')",
+    'weight' => -10,
+  );
 
   /* <equation> environment */
   $E[] = (object) array(
-      'pattern' => '@<equation( [^>]*)?>(.+?)</equation>@se',
-      'replacement' => "drutex_render('\[ $2 \]', '<var>format</var>', '$1', 'tag=\"table\" class=\"displaymath\"')",
-      'weight' => -7
-    );
+    'pattern' => '@<equation( [^>]*)?>(.+?)</equation>@se',
+    'replacement' => "drutex_render('\[ $2 \]', $'<var>filter</var>', '$1', 'tag=\"table\" class=\"displaymath\"')",
+    'weight' => -7,
+  );
 
   /* <equations> environment */
   $E[] = (object) array(
-      'pattern' => '@<equations( [^>]*)?>(.+?)</equations>@se',
-      'replacement' => "drutex_render('\begin{align*} $2 \end{align*}', '<var>format</var>', '$1', 'tag=\"table\" class=\"displaymath\"')",
-      'weight' => -6
-    );
+    'pattern' => '@<equations( [^>]*)?>(.+?)</equations>@se',
+    'replacement' => "drutex_render('\begin{align*} $2 \end{align*}', $'<var>filter</var>', '$1', 'tag=\"table\" class=\"displaymath\"')",
+    'weight' => -6,
+  );
 
   /* Paragraph math between $$ and $$ */
   $E[] = (object) array(
-      'pattern' => '@(^|[^\\\\])(\$\$.*?[^\\\\]\$\$)@se',
-      'replacement' => "'$1' . drutex_render('$2', '<var>format</var>', '', 'tag=\"table\" class=\"displaymath\"')",
-      'weight' => -5
-    );
+    'pattern' => '@(^|[^\\\\])(\$\$.*?[^\\\\]\$\$)@se',
+    'replacement' => "'$1' . drutex_render('$2', $'<var>filter</var>', '', 'tag=\"table\" class=\"displaymath\"')",
+    'weight' => -5,
+  );
 
   /* Paragraph math between \[ and \] */
   $E[] = (object) array(
-      'pattern' => '@\\\\\\[(.+?)\\\\\\]@se',
-      'replacement' => "drutex_render('$0', '<var>format</var>', '', 'tag=\"table\" class=\"displaymath\"')",
-      'weight' => -5
-    );
+    'pattern' => '@\\\\\\[(.+?)\\\\\\]@se',
+    'replacement' => "drutex_render('$0', $'<var>filter</var>', '', 'tag=\"table\" class=\"displaymath\"')",
+    'weight' => -5,
+  );
 
   /* Inline math (display style) between $! and $ */
   $E[] = (object) array(
-      'pattern' => '@(^|[^\\\\])\$!(.*?[^\\\\])\$@se',
-      'replacement' => "'$1' . drutex_render('$\displaystyle $2 $', '<var>format</var>')",
-      'weight' => -4
-    );
+    'pattern' => '@(^|[^\\\\])\$!(.*?[^\\\\])\$@se',
+    'replacement' => "'$1' . drutex_render('$\displaystyle $2 $', $'<var>filter</var>')",
+    'weight' => -4,
+  );
 
   /* Inline math between $ and $ */
   $E[] = (object) array(
-      'pattern' => '@(^|[^\\\\])\$(.*?[^\\\\])\$@se',
-      'replacement' => "'$1' . drutex_render('$ $2 $', '<var>format</var>')",
-      'weight' => -3
-    );
+    'pattern' => '@(^|[^\\\\])\$(.*?[^\\\\])\$@se',
+    'replacement' => "'$1' . drutex_render('$ $2 $', $'<var>filter</var>')",
+    'weight' => -3,
+  );
 
   /* unescape escaped dollar signs */
   $E[] = (object) array(
-      'pattern' => '@\\\\\\$@s',
-      'replacement' => '$',
-      'weight' => 1000 /*  very late */
-    );
+    'pattern' => '@\\\\\\$@s',
+    'replacement' => '$',
+    'weight' => 1000 /*  very late */,
+  );
 
   return $E;
 }
 
 /**
- * Implementation of subhook_filter_settings().
+ * Implements hook_filter_settings().
  */
-function drutex_render_filter_settings($format = -1) {
+function drutex_render_filter_settings($filter) {
   /* conversion methods */
-  $conversions = array('dvipng'            => 'dvipng',
-                       'imagemagick'       => 'ImageMagick (convert)',
-                       'dvipng_trans'      => 'dvipng - Transparent',
-                       'imagemagick_trans' => 'ImageMagick (convert) - Transparent',
-                       'dvipng_win32'      => 'dvipng - Windows',
-                       'imagemagick_win32' => 'ImageMagick (convert) - Windows',
-                       'custom'            => 'custom');
-
-  $form["drutex_template_render_$format"] = array(
-      '#type' => 'select',
-      '#title' => t('Template'),
-      '#options' => _drutex_get_templates(),
-      '#default_value' => drutex_var_get("drutex_template_render_$format")
+  $conversions = array(
+    'dvipng' => 'dvipng',
+    'imagemagick' => 'ImageMagick (convert)',
+    'dvipng_trans' => 'dvipng - Transparent',
+    'imagemagick_trans' => 'ImageMagick (convert) - Transparent',
+    'dvipng_win32' => 'dvipng - Windows',
+    'imagemagick_win32' => 'ImageMagick (convert) - Windows',
+    'custom' => 'custom',
+  );
+
+  $form["drutex_template"] = array(
+    '#type' => 'select',
+    '#title' => t('Template'),
+    '#options' => _drutex_get_templates(),
+    '#default_value' => $filter->settings['drutex_render']['drutex_template'],
+    
+    
   );
 
-  $form["drutex_dpi_render_$format"] = array(
+  $form["drutex_dpi"] = array(
     '#type' => 'textfield',
     '#title' => t('Resolution (DPI)'),
     '#size' => 15,
     '#maxlength' => 3,
-    '#default_value' => drutex_var_get("drutex_dpi_render_$format"),
-    '#description' => t('100 is small, 107 is default, 115 is big')
+    '#default_value' => $filter->settings['drutex_render']['drutex_dpi'],
+    '#description' => t('100 is small, 107 is default, 115 is big'),
   );
 
-  $form["drutex_conversion_render_$format"] = array(
+  $form["drutex_conversion"] = array(
     '#type' => 'select',
     '#title' => t('Conversion Method'),
     '#options' => $conversions,
-    '#default_value' => drutex_var_get("drutex_conversion_render_$format")
+    '#default_value' => $filter->settings['drutex_render']['drutex_conversion'],
   );
 
 
   /* Custom Conversion Method */
 
   /* determine default value for <custom conversion method> */
-  $default_value = drutex_var_get("drutex_pattern_render_custom_$format");
+  $default_value =  $filter->settings['drutex_render']['drutex_pattern_render_custom'];
   if (empty($default_value)) {
     /* get selected conversion method */
-    $conversion = drutex_var_get("drutex_conversion_render_$format");
-    $default_value = drutex_var_get("drutex_pattern_render_{$conversion}_$format");
+    $conversion = $filter->settings['drutex_render']['drutex_conversion'];
+    $default_value = $filter->settings['drutex_render']["drutex_pattern_{$conversion}"];
   }
 
   /* description for <custom conversion method> */
-  $description = t('* Leave blank and select dvipng or ImageMagick, to display a template for one of these commands in this box.') .'<br />'. t('* Every line is executed in sequence, but in its own shell (so path changes aren\'t inherited).') .'<br />'. t('Placeholders available:<br />
+  $description = t('* Leave blank and select dvipng or ImageMagick, to display a template for one of these commands in this box.') . '<br />' . t('* Every line is executed in sequence, but in its own shell (so path changes aren\'t inherited).') . '<br />' . t('Placeholders available:<br />
         [HASH] - hash (name) for the image<br />
         [TMP_DIR] - temporary dir (automatically cleaned)<br />
         [IMG_DIR] - directory where the images are saved<br />
@@ -178,13 +186,13 @@ function drutex_render_filter_settings($format = -1) {
         [DRUTEX_DIR] - full path to DruTeX base dir');
 
 
-  $form["drutex_pattern_render_custom_$format"] = array(
+  $form["drutex_pattern_render_custom"] = array(
     '#type' => 'textarea',
     '#title' => t('Conversion Method (Custom)'),
     '#rows' => 3,
     '#cols' => 50,
     '#default_value' => $default_value,
-    '#description' => $description
+    '#description' => $description,
   );
 
   return $form;
@@ -193,12 +201,13 @@ function drutex_render_filter_settings($format = -1) {
 /**
  * Renders $text in LaTeX.
  */
-function drutex_render($text, $format = -1, $attributes = '', $default_attributes = '') {
+function drutex_render($text, $filter, $attributes = '', $default_attributes = '') {
 
   $text = _drutex_unescape($text);
 
-  if (drutex_submodule_is_active('security', $format)) {
-    if (drutex_security($text, $format) == FALSE) {
+
+  if ($filter->settings['drutex_submodules']['security']) {
+    if (drutex_security($text, $filter) == FALSE) {
       return '<em class="error">Unallowed command detected!</em>';
     }
   }
@@ -207,19 +216,18 @@ function drutex_render($text, $format = -1, $attributes = '', $default_attribute
   $default_attributes = drutex_parse_attributes($default_attributes);
   $attributes = array_merge($default_attributes, $attributes);
 
-  $image_dir = drutex_var_get("drutex_dir_images_$format");
+  $image_dir = $filter->settings['drutex_base']['drutex_dir_images'];
+  $template_dir = drupal_get_path('module', 'drutex') . '/templates/render';
+  $template_file = $filter->settings['drutex_render']['drutex_template'];
+  $template = $template_dir . '/' . $template_file;
 
-  $template_dir = drutex_var_get('drutex_dir') .'/templates/render';
-  $template_file = drutex_var_get("drutex_template_render_$format");
-  $template = $template_dir .'/'. $template_file;
-
-  $dpi = drutex_var_get("drutex_dpi_render_$format");
+  $dpi = $filter->settings['drutex_render']['drutex_dpi'];
 
   if (!empty($attributes['dpi']) AND is_numeric($attributes['dpi']) AND $attributes['dpi'] > 0) {
     $dpi = $attributes['dpi'];
   }
 
-  $image_type = drutex_var_get("drutex_imagetype_$format");
+  $image_type = $filter->settings['drutex_imagetype']; //TODO : check the correct setting;
 
   $hash = sha1($text . $displaystyle . $template . $dpi);
   $image_file = "$image_dir/$hash.$image_type";
@@ -229,18 +237,23 @@ function drutex_render($text, $format = -1, $attributes = '', $default_attribute
 
   if (!is_file($image_file)) {
     /* create temporary dir */
-    $temporary_dir = _drutex_create_temporary_dir();
+    $temporary_dir = _drutex_create_temporary_dir($filter);
 
     /* conversion method */
-    $conversion = drutex_var_get("drutex_conversion_render_$format");
-
+    $conversion = $filter->settings['drutex_render']['drutex_conversion'];
     /* command patterns */
-    $pattern_convert = drutex_var_get("drutex_pattern_render_{$conversion}_$format");
+    $pattern_convert =  $filter->settings['drutex_render']['drutex_pattern_render_custom'];
 
     /* replacement arrays */
-    $map = array('[HASH]' => $hash, '[TMP_DIR]' => $temporary_dir, '[IMG_FILE]' => $image_file,
-      '[IMG_DIR]' => $image_dir, '[IMG_TYPE]' => $image_type, '[DPI]' => $dpi,
-      '[DRUTEX_DIR]' => drutex_var_get('drutex_dir'));
+    $map = array(
+      '[HASH]' => $hash,
+      '[TMP_DIR]' => $temporary_dir,
+      '[IMG_FILE]' => $image_file,
+      '[IMG_DIR]' => $image_dir,
+      '[IMG_TYPE]' => $image_type,
+      '[DPI]' => $dpi,
+      '[DRUTEX_DIR]' => drutex_var_get('drutex_dir'),
+    );
 
     /* conversion commands (seperated by \n) */
     $cmd_convert = str_replace(array_keys($map), $map, $pattern_convert);
@@ -254,7 +267,7 @@ function drutex_render($text, $format = -1, $attributes = '', $default_attribute
     $content = str_replace('DRUTEX_REPLACE', $text, $content);
 
     /* write $content to file, for LaTeX to read an render it */
-    file_save_data($content, "$temporary_dir/$hash.tex", FILE_EXISTS_REPLACE);
+    file_unmanaged_save_data($content, "$temporary_dir/$hash.tex", FILE_EXISTS_REPLACE);
 
     /* invoke all conversion commands */
     $commands = explode("\n", $cmd_convert);
@@ -265,7 +278,7 @@ function drutex_render($text, $format = -1, $attributes = '', $default_attribute
       if ($cmd) {
         exec($cmd, $cmd_output, $cmd_retval);
 
-        if (drutex_var_get("drutex_debug_$format")) {
+        if ($filter->settings['drutex_tools']['drutex_debug']){
           $level = ($cmd_retval == 0) ? WATCHDOG_NOTICE : WATCHDOG_WARNING;
           watchdog('DruTeX', "Command: %cmd<br />Return value: %cmdret", array('%cmd' => $cmd, '%cmdret' => $cmd_retval), $level);
         }
@@ -275,7 +288,7 @@ function drutex_render($text, $format = -1, $attributes = '', $default_attribute
     $success = is_file($image_file);
 
     /* remove temporary dir */
-    if (!drutex_var_get("drutex_debug_$format")) {
+    if (!$filter->settings['drutex_tools']['drutex_debug']) {
       _drutex_delete_dir($temporary_dir);
     }
     else {
@@ -283,16 +296,16 @@ function drutex_render($text, $format = -1, $attributes = '', $default_attribute
         watchdog('DruTeX', "%imgfile was created. Temporary directory was %tdir.", array('%imgfile' => $image_file, '%tdir' => $temporary_dir), WATCHDOG_NOTICE);
       }
       else {
-        watchdog('DruTeX', "%imgfile couldn\'t be created. Temporary directory was %tdir.",  array('%imgfile' => $image_file, '%tdir' => $temporary_dir), WATCHDOG_WARNING);
+        watchdog('DruTeX', "%imgfile couldn\'t be created. Temporary directory was %tdir.",   array('%imgfile' => $image_file, '%tdir' => $temporary_dir), WATCHDOG_WARNING);
       }
     }
   }
 
-  $img_url = drutex_get_image_url($format) ."/$hash.$image_type";
+  $img_url = drutex_get_image_url($filter) . "/$hash.$image_type";
 
   if ($success) {
     $img_alt = _drutex_hide('set', check_plain($text));
-    $res = '<img class="teximage" src="'. $img_url .'" alt="'. $img_alt .'" />';
+    $res = '<img class="teximage" src="' . $img_url . '" alt="' . $img_alt . '" />';
   }
   else {
     $res = '<em class="error">TeX Embedding failed!</em>';
@@ -326,13 +339,13 @@ function drutex_render($text, $format = -1, $attributes = '', $default_attribute
  * Get a list with templates for drutex_render.
  */
 function _drutex_get_templates() {
-  $dir = drupal_get_path('module', 'drutex') .'/templates/render';
+  $dir = drupal_get_path('module', 'drutex') . '/templates/render';
 
-  $A = file_scan_directory($dir, '.*\.tex');
+  $A = file_scan_directory($dir, '/.*\.tex/');
   $B = array();
 
   foreach ($A as $key => $val) {
-    $key = substr($key, strlen($dir)+1);
+    $key = substr($key, strlen($dir) + 1);
     $B[$key] = $key;
   }
 
diff --git a/drutex_security.inc b/drutex_security.inc
index 2533cd2..15adcd2 100644
--- a/drutex_security.inc
+++ b/drutex_security.inc
@@ -9,14 +9,14 @@
  */
 
 /**
- * Implementation of subhook_info().
+ * Implements hook_info().
  */
-function drutex_security_info($format = -1) {
+function drutex_security_info($filter) {
   return (object) array(
     'title' => t('Security restrictions'),
     'description' => t('Restricts the set of allowed LaTeX commands.'),
     'toggle' => TRUE,
-    'weight' => 20
+    'weight' => 20,
   );
 }
 
@@ -24,13 +24,17 @@ function drutex_security_info($format = -1) {
  * Implementation of subhook_filter_tips().
  */
 
-function drutex_security_filter_tips($delta, $format, $long = FALSE) {
+/**
+ * @todo Please document this function.
+ * @see http://drupal.org/node/1354
+ */
+function drutex_security_filter_tips($delta, $filter, $long = FALSE) {
 
-  if (drutex_var_get("drutex_security_active_$format") == TRUE) {
-    $allowed_commands = drutex_var_get("drutex_security_allowedcommands_$format");
-    $allowed_environments = drutex_var_get("drutex_security_allowedenvironments_$format");
+  if ($filter->settings['drutex_submodules']['security']){
+    $allowed_commands = $filter->settings['drutex_security']['drutex_allowedcommands'];
+    $allowed_environments = $filter->settings['drutex_security']['drutex_allowedenvironments'];
     $text = t('Allowed commands include: %cmd', array('%cmd' => $allowed_commands));
-    $text .= '<br />'. t('Allowed environments include: %env', array('%env' => $allowed_environments));
+    $text .= '<br />' . t('Allowed environments include: %env', array('%env' => $allowed_environments));
   }
   else {
     $text = '';
@@ -39,12 +43,12 @@ function drutex_security_filter_tips($delta, $format, $long = FALSE) {
 }
 
 /**
- * Implementation of subhook_defaults().
+ * Implements hook_defaults().
  */
 function drutex_security_defaults() {
   $D['drutex_security_active'] = FALSE;
-  $D['drutex_security_allowedcommands'] = '\atop \binom \cdot \cfrac \choose \frac \int \ln \over \sum \to';
-  $D['drutex_security_allowedenvironments'] = 'align array equation equations gather matrix split';
+  $D['drutex_allowedcommands'] = '\atop \binom \cdot \cfrac \choose \frac \int \ln \over \sum \to';
+  $D['drutex_allowedenvironments'] = 'align array equation equations gather matrix split';
 
   return $D;
 }
@@ -52,15 +56,15 @@ function drutex_security_defaults() {
 /**
  * Checks if $text only includes allowed commands/environments.
  */
-function drutex_security($text, $format = -1) {
+function drutex_security($text, $filter) {
   static $allowed_commands = array();
 
-  if (empty($allowed_commands[$format])) {
-    $allowed_commands[$format] = explode(' ', drutex_var_get("drutex_security_allowedcommands_$format"));
-    $allowed_environments = explode(' ', drutex_var_get("drutex_security_allowedenvironments_$format"));
+  if (empty($allowed_commands)) {
+    $allowed_commands = explode(' ', $filter->settings['drutex_security']['drutex_allowedcommands']);
+    $allowed_environments = explode(' ', $filter->settings['drutex_security']['drutex_allowedenvironments']);
 
     foreach ($allowed_environments as $env) {
-      $allowed_commands[$format] = array_merge($allowed_commands[$format],
+      $allowed_commands[$format] = array_merge($allowed_commands,
         array("\\begin\{$env}", "\\begin\{$env*}", "\\end\{$env}", "\\end\{$env*}"));
     }
   }
@@ -81,25 +85,25 @@ function drutex_security($text, $format = -1) {
 }
 
 /**
- * Implementation of subhook_filter_settings().
+ * Implements hook_filter_settings().
  */
-function drutex_security_filter_settings($format = -1) {
-  $form["drutex_security_allowedcommands_$format"] = array(
+function drutex_security_filter_settings($filter) {
+  $form["drutex_allowedcommands"] = array(
     '#type' => 'textarea',
     '#title' => t('Allowed commands'),
     '#rows' => 4,
     '#cols' => 50,
-    '#default_value' => drutex_var_get("drutex_security_allowedcommands_$format"),
-    '#description' => t('Commands are seperated by single space.')
+    '#default_value' => $filter->settings['drutex_security']['drutex_allowedcommands'],
+    '#description' => t('Commands are seperated by single space.'),
   );
 
-  $form["drutex_security_allowedenvironments_$format"] = array(
+  $form["drutex_allowedenvironments"] = array(
     '#type' => 'textarea',
     '#title' => t('Allowed environments'),
     '#rows' => 4,
     '#cols' => 50,
-    '#default_value' => drutex_var_get("drutex_security_allowedenvironments_$format"),
-    '#description' => t('Environments are seperated by single space.')
+    '#default_value' => $filter->settings['drutex_security']['drutex_allowedenvironments'],
+    '#description' => t('Environments are seperated by single space.'),
   );
 
   return $form;
diff --git a/drutex_tools.inc b/drutex_tools.inc
index 63fc1d8..985c8bf 100644
--- a/drutex_tools.inc
+++ b/drutex_tools.inc
@@ -6,19 +6,19 @@
  */
 
 /**
- * Implementation of subhook_info().
+ * Implements hook_info().
  */
-function drutex_tools_info($format = -1) {
+function drutex_tools_info($filter) {
   return (object) array(
     'title' => t('Toolbox'),
     'description' => t('Tools for more debugging and error logging.'),
     'toggle' => FALSE,
-    'weight' => 20
+    'weight' => 20,
   );
 }
 
 /**
- * Implementation of subhook_defaults().
+ * Implements hook_defaults().
  */
 function drutex_tools_defaults() {
   $D['drutex_tools_active'] = TRUE;
@@ -28,111 +28,103 @@ function drutex_tools_defaults() {
 }
 
 /**
- * Implementation of subhook_filter_settings().
+ * Implements hook_filter_settings().
  */
-function drutex_tools_filter_settings($format = -1) {
-  $choices = array('drupal' => 'Drupal style',
-                   'latex'  => 'LaTeX style');
+function drutex_tools_filter_settings($filter) {
+  $choices = array(
+    'drupal' => 'Drupal style',
+    'latex' => 'LaTeX style',
+  );
 
-  $form["drutex_debug_$format"] = array(
+  $form["drutex_debug"] = array(
     '#type' => 'checkbox',
     '#title' => t('Debugging mode'),
-    '#default_value' => drutex_var_get("drutex_debug_$format"),
-    '#description' => t('If enabled, the temporary files will no longer be deleted automatically. Also enables super-verbose logging.')
+    '#default_value' => $filter->settings['drutex_tools']['drutex_debug'],
+    '#description' => t('If enabled, the temporary files will no longer be deleted automatically. Also enables super-verbose logging.'),
   );
 
   $div_error = '<div class="filter-settings-error">';
   $div_correct = '<div class="filter-settings-correct">';
 
   /*
-    Temporary directory check
+   Temporary directory check
    */
-  $temporary_dir = drutex_var_get("drutex_dir_temporary_$format");
+  $temporary_dir = $filter->settings['drutex_base']['drutex_dir_temporary'];
   $is_writable = is_writable($temporary_dir);
 
   if ($is_writable == FALSE) {
     $form["drutex_check_tmpdir"] = array(
-      '#type' => 'markup',
-      '#value' => $div_error . t('The temporary directory (') . $temporary_dir .') isn\'t writable.'.'</div>'
+      '#markup' => $div_error . t('The temporary directory (') . $temporary_dir . ') isn\'t writable.' . '</div>',
     );
   }
   else {
     $form["drutex_check_tmpdir"] = array(
-      '#type' => 'markup',
-      '#value' => $div_correct . t('The temporary directory is writable.') .'</div>'
+      '#markup' => $div_correct . t('The temporary directory is writable.') . '</div>',
     );
   }
 
   /*
-    Image directory check
+   Image directory check
    */
-  $image_dir = drutex_var_get("drutex_dir_images_$format");
+  $image_dir = $filter->settings['drutex_base']['drutex_url_images'];
   $is_writable = is_writable($image_dir);
 
   if ($is_writable == FALSE) {
     $form["drutex_check_imgdir"] = array(
-      '#type' => 'markup',
-      '#value' => $div_error . t('The image directory (') . $image_dir .') isn\'t writable.'.'</div>'
+      '#markup' => $div_error . t('The image directory (') . $image_dir . ') isn\'t writable.' . '</div>',
     );
   }
   else {
     $form["drutex_check_imgdir"] = array(
-      '#type' => 'markup',
-      '#value' => $div_correct . t('The image directory is writable.') .'</div>'
+      '#markup' => $div_correct . t('The image directory is writable.') . '</div>',
     );
   }
 
   /*
-    LaTeX check - We grab -version which should work on all platforms
+   LaTeX check - We grab -version which should work on all platforms
    */
   exec('latex -version', $latex_output, $latex_return_value);
 
   if ($latex_return_value == 127) {
     $form["drutex_check_latex"] = array(
-      '#type' => 'markup',
-      '#value' => $div_error . t('Executing "latex" failed. Either LaTeX isn\'t installed or the "latex" executable is not in one of the search paths. <br /> You cannot render high-quality images without LaTeX. <br /> Mimetex maybe an alternative for you. Consult the documentation on how to use Mimetex.') .'</div>'
+      '#markup' => $div_error . t('Executing "latex" failed. Either LaTeX isn\'t installed or the "latex" executable is not in one of the search paths. <br /> You cannot render high-quality images without LaTeX. <br /> Mimetex maybe an alternative for you. Consult the documentation on how to use Mimetex.') . '</div>',
     );
   }
   else {
     $form["drutex_check_latex"] = array(
-      '#type' => 'markup',
-      '#value' => $div_correct . t('Executing "latex" was successful: ') ."<tt>{$latex_output[0]}</tt>".'</div>'
+      '#markup' => $div_correct . t('Executing "latex" was successful: ') . "<tt>{$latex_output[0]}</tt>" . '</div>',
     );
   }
 
   /*
-    dvipng check
+   dvipng check
    */
   exec('dvipng', $dvipng_output, $dvipng_return_value);
 
   if ($dvipng_return_value == 127) {
     $form["drutex_check_dvipng"] = array(
-      '#type' => 'markup',
-      '#value' => $div_error . t('Executing "dvipng" failed. Either dvipng isn\'t installed or the "dvipng" executable is not in one of the search paths. <br /> You cannot use dvipng for rendering images (check the conversion method above).') .'</div>'
+      '#markup' => $div_error . t('Executing "dvipng" failed. Either dvipng isn\'t installed or the "dvipng" executable is not in one of the search paths. <br /> You cannot use dvipng for rendering images (check the conversion method above).') . '</div>',
     );
   }
   else {
     $form["drutex_check_dvipng"] = array(
-      '#type' => 'markup',
-      '#value' => $div_correct . t('Executing "dvipng" was successful: ') ."<tt>{$dvipng_output[0]}</tt>".'</div>'
+      '#markup' => $div_correct . t('Executing "dvipng" was successful: ') . "<tt>{$dvipng_output[0]}</tt>" . '</div>',
     );
   }
 
   /*
-    Imagemagick check
+   Imagemagick check
    */
   exec('convert', $imagemagick_output, $imagemagick_return_value);
 
   if ($imagemagick_return_value == 127) {
     $form["drutex_check_imagemagick"] = array(
-      '#type' => 'markup',
-      '#value' => $div_error . t('Executing "convert" (ImageMagick) failed. Either ImageMagick isn\'t installed or the "convert" executable is not in one of the search paths. <br /> You cannot use ImageMagick for rendering images (check the conversion method above).') .'</div>'
+      '#markup' => $div_error . t('Executing "convert" (ImageMagick) failed. Either ImageMagick isn\'t installed or the "convert" executable is not in one of the search paths. <br /> You cannot use ImageMagick for rendering images (check the conversion method above).') . '</div>',
     );
   }
   else {
     $form["drutex_check_imagemagick"] = array(
-      '#type' => 'markup',
-      '#value' => $div_correct . t('Executing "convert" (ImageMagick) was successful: ') ."<tt>{$imagemagick_output[0]}</tt>".'</div>'
+       '#markup' => $div_correct . t('Executing "convert" (ImageMagick) was successful: ') . "<tt>{$imagemagick_output[0]}</tt>" . '</div>',
     );
   }
 
diff --git a/drutex_verbatim.inc b/drutex_verbatim.inc
index 0494948..29d315c 100644
--- a/drutex_verbatim.inc
+++ b/drutex_verbatim.inc
@@ -8,19 +8,19 @@
  */
 
 /**
- * Implementation of subhook_info().
+ * Implements hook_info().
  */
 function drutex_verbatim_info($format = -1) {
   return (object) array(
     'title' => t('Numbering / Referencing'),
     'description' => t('Provide verbatim environments (these will be hidden by all further DruTeX parsing).'),
     'toggle' => FALSE,
-    'weight' => 20
+    'weight' => 20,
   );
 }
 
 /**
- * Implementation of subhook_defaults().
+ * Implements hook_defaults().
  */
 function drutex_verbatim_defaults() {
   $D['drutex_verbatim_active'] = TRUE;
@@ -28,24 +28,24 @@ function drutex_verbatim_defaults() {
 }
 
 /**
- * Implementation of subhook_node2html().
+ * Implements hook_node2html().
  */
 function drutex_verbatim_node2html() {
   $E = array();
 
   /* <code>*</code> */
   $E[] = (object) array(
-      'pattern' => '@<code>(.+?)</code>@se',
-      'replacement' => "_drutex_hide('set', '$0')",
-      'weight' => -100,
-    );
+    'pattern' => '@<code>(.+?)</code>@se',
+    'replacement' => "_drutex_hide('set', '$0')",
+    'weight' => -100,
+  );
 
   /* <notex>*</notex> */
   $E[] = (object) array(
-      'pattern' => '@<notex>(.+?)</notex>@se',
-      'replacement' => "_drutex_hide('set', '$1')",
-      'weight' => -100,
-    );
+    'pattern' => '@<notex>(.+?)</notex>@se',
+    'replacement' => "_drutex_hide('set', '$1')",
+    'weight' => -100,
+  );
 
   return $E;
 }
