--- measure_old.py	2013-03-04 15:02:47.000000000 +0100
+++ measure.py	2013-03-04 15:02:58.000000000 +0100
@@ -54,6 +54,8 @@
     ALIAS  = {}
     UNITS  = {}
     LALIAS = {}
+    
+    to_number = float
 
     def __init__(self, default_unit=None, **kwargs):
         value, self._default_unit = self.default_units(kwargs)
@@ -65,13 +67,13 @@
         return getattr(self, self.STANDARD_UNIT)
 
     def _set_standard(self, value):
-        setattr(self, self.STANDARD_UNIT, value)
+        setattr(self, self.STANDARD_UNIT, self.to_number(value))
 
     standard = property(_get_standard, _set_standard)
-
+    
     def __getattr__(self, name):
         if name in self.UNITS:
-            return self.standard / self.UNITS[name]
+            return self.standard / self.to_number(self.UNITS[name])
         else:
             raise AttributeError('Unknown unit type: %s' % name)
 
@@ -129,26 +131,26 @@
     def __mul__(self, other):
         if isinstance(other, NUMERIC_TYPES):
             return self.__class__(default_unit=self._default_unit,
-                **{self.STANDARD_UNIT: (self.standard * other)})
+                **{self.STANDARD_UNIT: (self.standard * self.to_number(other))})
         else:
             raise TypeError('%(class)s must be multiplied with number' % {"class":pretty_name(self)})
 
     def __imul__(self, other):
         if isinstance(other, NUMERIC_TYPES):
-            self.standard *= float(other)
+            self.standard *= self.to_number(other)
             return self
         else:
             raise TypeError('%(class)s must be multiplied with number' % {"class":pretty_name(self)})
 
     def __rmul__(self, other):
-        return self * other
+        return self * self.to_number(other)
 
     def __truediv__(self, other):
         if isinstance(other, self.__class__):
             return self.standard / other.standard
         if isinstance(other, NUMERIC_TYPES):
             return self.__class__(default_unit=self._default_unit,
-                **{self.STANDARD_UNIT: (self.standard / other)})
+                **{self.STANDARD_UNIT: (self.standard / self.to_number(other))})
         else:
             raise TypeError('%(class)s must be divided with number or %(class)s' % {"class":pretty_name(self)})
 
@@ -157,7 +159,7 @@
 
     def __itruediv__(self, other):
         if isinstance(other, NUMERIC_TYPES):
-            self.standard /= float(other)
+            self.standard /= self.to_number(other)
             return self
         else:
             raise TypeError('%(class)s must be divided with number' % {"class":pretty_name(self)})
@@ -300,7 +302,7 @@
                 **{AREA_PREFIX + self.STANDARD_UNIT: (self.standard * other.standard)})
         elif isinstance(other, NUMERIC_TYPES):
             return self.__class__(default_unit=self._default_unit,
-                **{self.STANDARD_UNIT: (self.standard * other)})
+                **{self.STANDARD_UNIT: (self.standard * self.to_number(other))})
         else:
             raise TypeError('%(distance)s must be multiplied with number or %(distance)s' % {
                 "distance" : pretty_name(self.__class__),
@@ -317,7 +319,7 @@
     def __truediv__(self, other):
         if isinstance(other, NUMERIC_TYPES):
             return self.__class__(default_unit=self._default_unit,
-                **{self.STANDARD_UNIT: (self.standard / other)})
+                **{self.STANDARD_UNIT: (self.standard / self.to_number(other))})
         else:
             raise TypeError('%(class)s must be divided by a number' % {"class":pretty_name(self)})
 
