diff --git a/bob/bio/vein/algorithm/HammingDistance.py b/bob/bio/vein/algorithm/HammingDistance.py
index 6497cb8133b92e0151d1ad7879eecbcc35d79ddb..3ce7729ae816c74550c84c0e03fa9518ab1aa938 100644
--- a/bob/bio/vein/algorithm/HammingDistance.py
+++ b/bob/bio/vein/algorithm/HammingDistance.py
@@ -1,8 +1,24 @@
-# Calculates the Hamming distance (proportion of mismatching corresponding bits) between two binary vectors
+#!/usr/bin/env python
+# vim: set fileencoding=utf-8 :
 
-import bob.bio.base
+
+from bob.bio.base.algorithm import Distance
 import scipy.spatial.distance
-algorithm = bob.bio.base.algorithm.Distance(
-    distance_function = scipy.spatial.distance.hamming,
-    is_distance_function = False  # setting this to False ensures that Hamming distances are returned as positive values rather than negative
-)
\ No newline at end of file
+
+
+class HammingDistance (Distance):
+  """Finger vein matching: Hamming Distance between binary fingervein feature vectors
+  """
+
+  def __init__(
+      self,
+      distance_function = scipy.spatial.distance.hamming,
+      is_distance_function = False  # setting this to False ensures that Hamming distances are returned as positive values rather than negative
+  ):
+
+    # Call base class constructor
+    Distance.__init__(
+        self,
+        distance_function = distance_function,
+        is_distance_function = is_distance_function
+    )
\ No newline at end of file
diff --git a/bob/bio/vein/tests/test.py b/bob/bio/vein/tests/test.py
index 8a594b22dfc5335b6091cd279b85d30ece16f113..fb4c4e1951236cfb4cb20d59158237934805c99e 100644
--- a/bob/bio/vein/tests/test.py
+++ b/bob/bio/vein/tests/test.py
@@ -685,3 +685,26 @@ def test_correlation():
   total = time.clock() - start
   print('scipy+correlate2d, %d iterations - %.2e per iteration' % (N, total/N))
   '''
+
+
+def test_hamming_distance():
+
+  from ..algorithm.HammingDistance import HammingDistance
+  HD = HammingDistance()
+
+  # Tests on simple binary arrays:
+  # 1.) Maximum HD (1.0):
+  model_1 = numpy.array([0, 1, 1, 1, 0, 1, 1, 0, 0, 0, 1, 0])
+  probe_1 = numpy.array([[1, 0, 0, 0, 1, 0], [0, 1, 1, 1, 0, 1]])
+  score_max = HD.score(model_1, probe_1)
+  assert score_max == 1.0
+  # 2.) Minimum HD (0.0):
+  model_2 = numpy.array([0, 1, 1, 1, 0, 1, 0, 1, 1, 1, 0, 1])
+  probe_2 = numpy.array([[0, 1, 1, 1, 0, 1], [0, 1, 1, 1, 0, 1]])
+  score_min = HD.score(model_2, probe_2)
+  assert score_min == 0.0
+  # 3.) HD of exactly half (0.5)
+  model_3 = numpy.array([0, 1, 1, 1, 0, 1, 1, 0, 0, 0, 1, 0])
+  probe_3 = numpy.array([[0, 1, 1, 1, 0, 1], [0, 1, 1, 1, 0, 1]])
+  score_half = HD.score(model_3, probe_3)
+  assert score_half == 0.5
\ No newline at end of file