diff --git l10n_client.js l10n_client.js
index 5a5a088..b470009 100644
--- l10n_client.js
+++ l10n_client.js
@@ -1,107 +1,36 @@
 // $Id: l10n_client.js,v 1.10.2.8 2010-04-20 22:36:09 goba Exp $
 
-// Store all l10n_client related data + methods in its own object
-jQuery.extend(Drupal, {
-  l10nClient: new (function() {
-    // Set "selected" string to unselected, i.e. -1
-    this.selected = -1;
-    // Keybindings
-    this.keys = {'toggle':'ctrl+shift+s', 'clear': 'esc'}; // Keybindings
-    // Keybinding functions
-    this.key = function(pressed) {
-      switch(pressed) {
-        case 'toggle':
-          // Grab user-hilighted text & send it into the search filter
-          userSelection = window.getSelection ? window.getSelection() : document.getSelection ? document.getSelection() : document.selection.createRange().text;
-          userSelection = String(userSelection);
-          if(userSelection.length > 0) {
-            Drupal.l10nClient.filter(userSelection);
-            Drupal.l10nClient.toggle(1);
-            $('#l10n-client .string-search').focus();      
-          } else {
-            if($('#l10n-client').is('.hidden')) {
-              Drupal.l10nClient.toggle(1);
-              if(!$.browser.safari) {
-                $('#l10n-client .string-search').focus();
-              }
-            } else { 
-              Drupal.l10nClient.toggle(0);
-            }
-          }
-        break;
-        case 'clear':
-          this.filter(false);      
-        break;
-      }
-    }
-    // Toggle the l10nclient
-    this.toggle = function(state) {
-      switch(state) {
-        case 1:
-          $('#l10n-client-string-select, #l10n-client-string-editor, #l10n-client .labels .label').show();
-          $('#l10n-client').height('22em').removeClass('hidden');
-          $('#l10n-client .labels .toggle').text('X');
-          if(!$.browser.msie) {
-            $('body').css('border-bottom', '22em solid #fff');
-          }
-          $.cookie('Drupal_l10n_client', '1', {expires: 7, path: '/'});
-        break;
-        case 0:
-          $('#l10n-client-string-select, #l10n-client-string-editor, #l10n-client .labels .label').hide();
-          $('#l10n-client').height('2em').addClass('hidden');
-          $('#l10n-client .labels .toggle').text(Drupal.t('Translate Text'));
-          if(!$.browser.msie) {
-            $('body').css('border-bottom', '0px');
-          }
-          $.cookie('Drupal_l10n_client', '0', {expires: 7, path: '/'});
-        break;        
-      }
-    }
-    // Get a string from the DOM tree
-    this.getString = function(index, type) {
-      return $('#l10n-client-data div:eq('+index+') .'+type).text();
-    }
-    // Set a string in the DOM tree
-    this.setString = function(index, data) {
-      $('#l10n-client-data div:eq('+index+') .target').text(data);
-    }
-    // Filter the the string list by a search string
-    this.filter = function(search) {
-      if(search == false || search == '') {
-        $('#l10n-client #search-filter-clear').focus();
-        $('#l10n-client-string-select li').show();
-        $('#l10n-client .string-search').val('');
-        $('#l10n-client .string-search').focus();
-      } else {
-        if(search.length > 0) {
-          $('#l10n-client-string-select li').hide();
-          $('#l10n-client-string-select li:contains('+search+')').show();
-          $('#l10n-client .string-search').val(search);
-        }
-      }
-    }
-  })
-});
+// Store some data we need later on.
+Drupal.settings.l10nClient = {
+  selected: -1,
+  keys: {
+    'toggle': 'ctrl+shift+s',
+    'clear': 'esc'
+  }
+};
 
 // Attaches the localization editor behavior to all required fields.
 Drupal.behaviors.l10nClient = function (context) {
-  // Killswitch - attach only once.
-  if ($('#l10n-client').is('.l10n-client-processed')) {
+  var self = Drupal.behaviors.l10nClient,
+      $client = $('#l10n-client');
+
+  // Killswitch, only attach once
+  if ($client.is('.l10n-client-processed')) {
     return;
   }
 
   // First time - init & attach all handlers.
-  $('#l10n-client').addClass('l10n-client-processed');
+  $client.addClass('l10n-client-processed');
 
   switch($.cookie('Drupal_l10n_client')) {
     case '1':
-      Drupal.l10nClient.toggle(1);
+      self.toggle(1);
     break;
     default:
-      Drupal.l10nClient.toggle(0);
+      self.toggle(0);
     break;
   }
-  
+
   // If the selection changes, copy string values to the source and target fields.
   // Add class to indicate selected string in list widget.
   $('#l10n-client-string-select li').click(function() {
@@ -109,19 +38,18 @@ Drupal.behaviors.l10nClient = function (context) {
     $(this).addClass('active');
     var index = $('#l10n-client-string-select li').index(this);
 
-    $('#l10n-client-string-editor .source-text').text(Drupal.l10nClient.getString(index, 'source'));
-    $('#l10n-client-form .translation-target').val(Drupal.l10nClient.getString(index, 'target'));
-    $('#l10n-client-form #edit-textgroup').val(Drupal.l10nClient.getString(index, 'textgroup'));
-    Drupal.l10nClient.selected = index;
+    $('#l10n-client-string-editor .source-text').text(self.getString(index, 'source'));
+    $('#l10n-client-form .translation-target').val(Drupal.behaviors.l10nClient.getString(index, 'target'));
+    self.selected = index;
     $('#l10n-client-form .form-submit').removeAttr("disabled");
   });
 
   // When l10n_client window is clicked, toggle based on current state.
-  $('#l10n-client .labels .toggle').click(function() {
-    if($('#l10n-client').is('.hidden')) {
-      Drupal.l10nClient.toggle(1);
+  $client.find('.labels .toggle').click(function() {
+    if($client.is('.hidden')) {
+      self.toggle(1);
     } else { 
-      Drupal.l10nClient.toggle(0);
+      self.toggle(0);
     }
   });
 
@@ -139,18 +67,18 @@ Drupal.behaviors.l10nClient = function (context) {
 
   // Register keybindings using jQuery hotkeys
   if($.hotkeys) {
-    $.hotkeys.add(Drupal.l10nClient.keys['toggle'], function(){Drupal.l10nClient.key('toggle')});
-    $.hotkeys.add(Drupal.l10nClient.keys['clear'], {target:'#l10n-client .string-search', type:'keyup'}, function(){Drupal.l10nClient.key('clear')});
+    $.hotkeys.add(Drupal.settings.l10nClient.keys['toggle'], function(){self.key('toggle')});
+    $.hotkeys.add(Drupal.settings.l10nClient.keys['clear'], {target:'#l10n-client .string-search', type:'keyup'}, function(){self.key('clear')});
   }
-  
+
   // Custom listener for l10n_client livesearch
-  $('#l10n-client .string-search').keyup(function(key) {
-    Drupal.l10nClient.filter($('#l10n-client .string-search').val());
+  $client.find('.edit-search').keyup(function(key) {
+    self.filter($(this).val());
   });
 
   // Clear search
-  $('#l10n-client #l10n-client-search-filter-clear').click(function() {
-    Drupal.l10nClient.filter(false);
+  $client.find('#l10n-client-search-filter-clear').click(function() {
+    self.filter(false);
     return false;
   });
 
@@ -169,7 +97,7 @@ Drupal.behaviors.l10nClient = function (context) {
       },
       success: function (data) {
         // Store string in local js
-        Drupal.l10nClient.setString(Drupal.l10nClient.selected, $('#l10n-client-form .translation-target').val());
+        Drupal.behaviors.l10nClient.setString(Drupal.settings.l10nClient.selected, $('#l10n-client-form .translation-target').val());
 
         // Figure out the display of the new translation in the selection list.
         var newTranslation = $('#l10n-client-form .translation-target').val();
@@ -190,14 +118,13 @@ Drupal.behaviors.l10nClient = function (context) {
           // above 81.
           newTranslationDisplay = newTranslationStripped.substr(0, 78) + '...';
         }
-        
+
         // Mark string as translated.
-        $('#l10n-client-string-select li').eq(Drupal.l10nClient.selected).removeClass('untranslated').removeClass('active').addClass('translated').text(newTranslationDisplay);
+        $('#l10n-client-string-select li').eq(Drupal.settings.l10nClient.selected).removeClass('untranslated').removeClass('active').addClass('translated').text(newTranslationDisplay);
 
         // Empty input fields.
         $('#l10n-client-string-editor .source-text').html('');
         $('#l10n-client-form .translation-target').val('');
-
       },
       error: function (xmlhttp) {
         alert(Drupal.t('An HTTP error @status occured.', { '@status': xmlhttp.status }));
@@ -205,5 +132,85 @@ Drupal.behaviors.l10nClient = function (context) {
     });
     return false;
   });
-  
+};
+
+// Keybinding functions
+Drupal.behaviors.l10nClient.key = function(pressed) {
+  var self = Drupal.behaviors.l10nClient,
+      $client = $('#l10n-client');
+  switch (pressed) {
+    case 'toggle':
+      // Grab user-hilighted text & send it into the search filter
+      var userSelection = window.getSelection ? window.getSelection() : document.getSelection ? document.getSelection() : document.selection.createRange().text;
+      userSelection = String(userSelection);
+      if(userSelection.length > 0) {
+        self.filter(userSelection);
+        self.toggle(1);
+        $client.find('.string-search').focus();      
+      } else {
+        if($client.is('.hidden')) {
+          self.toggle(1);
+          if(!$.browser.safari) {
+            $client.find('.string-search').focus();
+          }
+        } else { 
+          self.toggle(0);
+        }
+      }
+    break;
+    case 'clear':
+      self.filter(false);      
+    break;
+  }
+};
+
+// Toggle the l10nclient
+Drupal.behaviors.l10nClient.toggle = function(state) {
+  var $client = $('#l10n-client');
+  switch(state) {
+    case 1:
+      $('#l10n-client-string-select, #l10n-client-string-editor, #l10n-client .labels .label').show();
+      $client.height('22em').removeClass('hidden');
+      $client.find('.labels .toggle').text('X');
+      if(!$.browser.msie) {
+        $('body').css('border-bottom', '22em solid #fff');
+      }
+      $.cookie('Drupal_l10n_client', '1', {expires: 7, path: '/'});
+    break;
+    case 0:
+      $('#l10n-client-string-select, #l10n-client-string-editor, #l10n-client .labels .label').hide();
+      $client.height('2em').addClass('hidden');
+      $client.find('.labels .toggle').text(Drupal.t('Translate Text'));
+      if(!$.browser.msie) {
+        $('body').css('border-bottom', '0px');
+      }
+      $.cookie('Drupal_l10n_client', '0', {expires: 7, path: '/'});
+    break;        
+  }
+};
+
+// Get a string from the DOM tree
+Drupal.behaviors.l10nClient.getString = function(index, type) {
+  return $('#l10n-client-data div:eq('+index+') .'+type).text();
+};
+
+// Set a string in the DOM tree
+Drupal.behaviors.l10nClient.setString = function(index, data) {
+  $('#l10n-client-data div:eq('+index+') .target').text(data);
+};
+
+// Filter the the string list by a search string
+Drupal.behaviors.l10nClient.filter = function(search) {
+  var $client = $('#l10n-client');
+  if(search == false || search == '') {
+    $client.find('#search-filter-clear').focus();
+    $('#l10n-client-string-select li').show();
+    $client.find('#edit-search').val('').focus();
+  } else {
+    if(search.length > 0) {
+      $('#l10n-client-string-select li').hide();
+      $('#l10n-client-string-select li:contains('+search+')').show();
+      $client.find('#edit-search').val(search);
+    }
+  }
 };
