diff --git a/src/Histogram.py b/src/Histogram.py
index b20fd7502795aa26bc43c936475957ce00de65a9..3927c87a58cc10fe2230d2e90b6ee127859eb554 100644
--- a/src/Histogram.py
+++ b/src/Histogram.py
@@ -6,12 +6,14 @@ class Histogram:
         self.max = max
 
     def add(self, number):
-        bin_index = self.get_bin_index(number)
-        self.bins[bin_index] += 1
+        #bin_index = self.get_bin_index(number)
+        #self.bins[bin_index] += 1
+        self.bins[number] += 1
 
     def remove(self, number):
-        bin_index = self.get_bin_index(number)
-        self.bins[bin_index] -= 1
+        #bin_index = self.get_bin_index(number)
+        #self.bins[bin_index] -= 1
+        self.bins[number] -= 1
 
     def get_bin_index(self, number):
         return (number - self.min) / ((self.max - self.min) / len(self.bins))
diff --git a/src/Interpolation_USELESS.py b/src/Interpolation_USELESS.py
deleted file mode 100644
index 216fb8448618638467965cdbc0e27e8e4c1275fc..0000000000000000000000000000000000000000
--- a/src/Interpolation_USELESS.py
+++ /dev/null
@@ -1,30 +0,0 @@
-from pylab import floor
-
-def pV(image, x, y):
-    '''Get the value of a point x,y in the given image, where x and y are not
-    necessary integers, so the value is interpolated from its neighbouring
-    pixels.'''
-    if inImage(image, x, y):
-        x_low = floor(x)
-        x_high = floor(x + 1)
-        y_low = floor(y)
-        y_high = floor(y + 1)
-        x_y = (x_high - x_low) * (y_high - y_low)
-        
-        interpolatedValue = image[x_low, y_low] / x_y * (x_high - x) * \
-                                (y_high - y)\
-                          + image[x_high][y_low] / x_y * (x - x_low) * \
-                                (y_high - y)\
-                          + image[x_low][y_high] / x_y * (x_high - x) * \
-                                (y - y_low)\
-                          + image[x_high][y_high] / x_y * (x - x_low) * \
-                                (y - y_low)
-        return interpolatedValue
-    else:
-        constantValue = 0
-        return constantValue
-    
-def inImage(image, x, y):
-    '''Return if the pixels is within the image bounds.'''
-    return (x > 0 and x < image.get_height() - 1 \
-        and y > 0 and y < image.get_width() - 1)
diff --git a/src/LocalBinaryPatternizer.py b/src/LocalBinaryPatternizer.py
index b1f42101da95f458453e3c4cf4a1840cad3c7d54..5fec1174267c194ea6387d5089203964115da6a5 100644
--- a/src/LocalBinaryPatternizer.py
+++ b/src/LocalBinaryPatternizer.py
@@ -32,6 +32,16 @@ class LocalBinaryPatternizer:
              | (self.is_pixel_darker(y + 1, x - 1, value) << 1) \
              | (self.is_pixel_darker(y    , x - 1, value))
 
+    def pattern_5x5_hybrid(self, y, x, value):
+        return (self.is_pixel_darker(y - 2, x - 2, value) << 7) \
+             | (self.is_pixel_darker(y - 2, x    , value) << 6) \
+             | (self.is_pixel_darker(y - 2, x + 2, value) << 5) \
+             | (self.is_pixel_darker(y    , x + 2, value) << 4) \
+             | (self.is_pixel_darker(y + 2, x + 2, value) << 3) \
+             | (self.is_pixel_darker(y + 2, x    , value) << 2) \
+             | (self.is_pixel_darker(y + 2, x - 2, value) << 1) \
+             | (self.is_pixel_darker(y    , x - 2, value))
+
     def pattern_5x5(self, y, x, value):
         return (self.is_pixel_darker(y - 1, x - 2, value) << 11) \
              | (self.is_pixel_darker(y    , x - 2, value) << 10) \
diff --git a/src/find_svm_params.py b/src/find_svm_params.py
index 8cdb8cb12f9a2076a83428136ac4c226acf4c76e..5c5140814fd568bcbfe9e4c6cd9e518dee840492 100755
--- a/src/find_svm_params.py
+++ b/src/find_svm_params.py
@@ -102,7 +102,7 @@ i = 0
 s = '     c\y'
 
 for y in Y:
-    s += '| %f' % y
+    s += ' | %f' % y
 
 s += '\n'
 
@@ -110,12 +110,13 @@ for c in C:
     s += ' %7s' % c
 
     for y in Y:
-        s +=  '| %8d' % int(round(results[i] * 100))
+        s +=  ' | %8d' % int(round(results[i] * 100))
         i += 1
 
     s += '\n'
 
-s += '\nBest result: %.3f%% for C = %f and gamma = %f' % best[:3]
+s += '\nBest result: %.3f%% for C = %f and gamma = %f' \
+        % ((best[0] * 100,) + best[1:3])
 
 print 'Saving results...'
 f = open(results_file, 'w+')
diff --git a/src/test_performance.py b/src/test_performance.py
new file mode 100755
index 0000000000000000000000000000000000000000..6cfa4dfa1c08b2e62efd33cc2280be6413a59636
--- /dev/null
+++ b/src/test_performance.py
@@ -0,0 +1,37 @@
+#!/usr/bin/python
+from cPickle import load
+from sys import argv, exit
+from time import time
+
+from Classifier import Classifier
+
+if len(argv) < 4:
+    print 'Usage: python %s NEIGHBOURS BLUR_SCALE COUNT' % argv[0]
+    exit(1)
+
+neighbours = int(argv[1])
+blur_scale = float(argv[2])
+count = int(argv[3])
+suffix = '_%s_%s' % (blur_scale, neighbours)
+
+chars_file = 'characters%s.dat' % suffix
+classifier_file = 'classifier%s.dat' % suffix
+
+print 'Loading characters...'
+chars = load(open(chars_file, 'r'))[:count]
+count = len(chars)
+print 'Read %d characters' % count
+
+print 'Loading classifier...'
+classifier = Classifier(filename=classifier_file)
+
+start = time()
+
+for char in chars:
+    classifier.classify(char)
+
+elapsed = time() - start
+individual = elapsed / count
+
+print 'Took %fs to classify %d caracters (%fms per character)' \
+        % (elapsed, count, individual * 1000)