diff --git a/mollom.module b/mollom.module
index 2a7bf58..5e42bb5 100644
--- a/mollom.module
+++ b/mollom.module
@@ -313,6 +313,8 @@ function mollom_nodeapi($node, $op) {
   }
 }
 
+
+
 /**
  * This function implements the _comment hook and is called when a comment is inserted.
  */
@@ -618,6 +620,14 @@ function _mollom_protectable_forms() {
         'mode' => MOLLOM_MODE_ANALYSIS,
       );
     }
+    
+    // Trackbacks
+    if (module_exists('trackback')) {
+      $forms['trackback'] = array(
+        'name' => 'trackbacks',
+        'mode' => MOLLOM_MODE_ANALYSIS,
+      );
+    }
   }
 
   return $forms;
@@ -1163,6 +1173,59 @@ function mollom($method, $data = array()) {
   watchdog('mollom', 'No Mollom servers could be reached or all servers returned an error -- the server list was emptied.', NULL, WATCHDOG_ERROR);
 }
 
+/** Implementation of hook_trackback().
+ *
+ * Checks incoming Trackbacks with Mollom
+ */
+function mollom_trackback(&$trackback, $op) {
+  if (variable_get('mollom_trackback', 0)) {
+    switch ($op) {
+      case 'receive':
+      case 'insert':
+        $data = array(
+          'post_title'  => $trackback->subject,
+          'post_body'   => $trackback->excerpt, // Dev. Mode: 'spam', 'ham', 'unsure'
+          'author_name' => $trackback->name, // Site name of Trackback
+          'author_url'  => $trackback->url,
+          'author_ip'   => $trackback->site,
+        );
+
+        $response = mollom('mollom.checkContent', $data);
+
+        if (isset($trackback->trid) && !empty($trackback->trid)) {
+
+          switch ($response['spam']) {
+            case MOLLOM_ANALYSIS_HAM:
+              // Do nothing/publicise
+              $operation = 'publish';
+              break;
+
+            case MOLLOM_ANALYSIS_SPAM:
+              // Delete the trackback
+              $operation = 'delete';
+              break;
+
+            case MOLLOM_ANALYSIS_UNSURE:
+              /**
+               * Put into Trackback's moderation queue and allow for the site's
+               * maintainer to tell Mollom whether it was good or bad - possibly by
+               * catching $op == 'publish'/'unpublish'/'delete'? Or add new 'publish
+               * and report as ham to Mollom' and 'delete and report as spam to Mollom'?
+               **/
+               $operation = 'unpublish';
+               break;
+          }
+          _trackback_operation($operation, $trackback->trid); // perform the trackback operation
+        }
+        break;
+        
+        // TODO: Tell Mollom when a trackback is deleted
+        case 'delete':
+        break;
+    }
+  }
+}
+
 /**
  * This function generates an array with all information required to
  * authenticate against Mollom.  To prevent forged requests where you are
