diff --git tests/userpoints_api.test tests/userpoints_api.test
index 0d73a56..5935c4e 100644
--- tests/userpoints_api.test
+++ tests/userpoints_api.test
@@ -49,15 +49,15 @@ class UserpointsTestCase extends DrupalWebTestCase {
     $this->assertTrue($return['status'] == TRUE , t('API responded with successful grant of points'));
 
     //Check the database to ensure the point were properly saved
-    $sql = "SELECT points from {userpoints_txn} WHERE uid = %d AND points = %d";
-    $db_points = (int) db_result(db_query($sql, $user->uid, $points));
+    $sql = "SELECT points from {userpoints_txn} WHERE uid = %d AND points = %n";
+    $db_points = (numeric) db_result(db_query($sql, $user->uid, $points));
     $this->assertTrue($db_points === $points, t('Successfully verified points in the txn table'));
 
     //Check that the transaction table and the summary table match
     $sql = "SELECT SUM(points) FROM {userpoints_txn} WHERE uid = %d";
-    $txn_points = (int) db_result(db_query($sql, $user->uid));
+    $txn_points = (numeric) db_result(db_query($sql, $user->uid));
     $sql = "SELECT SUM(points) from {userpoints} WHERE uid = %d";
-    $up_points = (int) db_result(db_query($sql, $user->uid));
+    $up_points = (numeric) db_result(db_query($sql, $user->uid));
     $this->assertTrue($txn_points === $up_points, t('Sum of transactions match total points for user'));
 
     //Add negative points to the initial value and check the values
@@ -66,8 +66,8 @@ class UserpointsTestCase extends DrupalWebTestCase {
     userpoints_userpointsapi($points);
 
     //Check the database to ensure the negative point value was properly saved
-    $sql = "SELECT points from {userpoints_txn} WHERE uid = %d AND points = %d";
-    $db_points = (int) db_result(db_query($sql, $user->uid, $points));
+    $sql = "SELECT points from {userpoints_txn} WHERE uid = %d AND points = %n";
+    $db_points = (numeric) db_result(db_query($sql, $user->uid, $points));
     $this->assertTrue($db_points === $points, t('Successfully verified negative points in the txn table'));
 
 
@@ -89,10 +89,10 @@ class UserpointsTestCase extends DrupalWebTestCase {
 
     //Check the summary table to make sure everything is still kosher.
     $sql = "SELECT SUM(points) FROM {userpoints_txn} WHERE uid = %d";
-    $txn_points = (int) db_result(db_query($sql, $user->uid));
+    $txn_points = (numeric) db_result(db_query($sql, $user->uid));
 
     $sql = "SELECT SUM(points) from {userpoints} WHERE uid = %d";
-    $up_points = (int) db_result(db_query($sql, $user->uid));
+    $up_points = (numeric) db_result(db_query($sql, $user->uid));
 
     $this->assertTrue($txn_points === $up_points, t('Sum of transactions matches the caching table'));
     $this->assertTrue($up_points === $sumpoints,
@@ -128,7 +128,7 @@ class UserpointsTestCase extends DrupalWebTestCase {
     );
 
     //Check the Database to make sure the points made it there
-    $sql = "SELECT points from {userpoints_txn} WHERE uid = %d AND points = %d";
+    $sql = "SELECT points from {userpoints_txn} WHERE uid = %d AND points = %n";
     $db_points = db_result(db_query($sql, $user->uid, $points));
     $this->assertTrue($db_points == $points, t('Successfully verified points in the txn table'));
 
@@ -161,7 +161,7 @@ class UserpointsTestCase extends DrupalWebTestCase {
     );
 
     //Check the Database to make sure the points made it there
-    $sql = "SELECT points from {userpoints_txn} WHERE uid = %d AND points = %d";
+    $sql = "SELECT points from {userpoints_txn} WHERE uid = %d AND points = %n";
     $db_points = db_result(db_query($sql, $admin_user->uid, $points));
     $this->assertTrue($db_points == $points, t('Successfully verified points in the txn table'));
 
@@ -249,8 +249,8 @@ class UserpointsTestCase extends DrupalWebTestCase {
       $this->assertTrue($return['status'] == TRUE,
         t($time['string'] ." API responded with a successful grant of points"));
       /* Check the database to ensure the points were properly saved */
-      $sql = "SELECT points FROM {userpoints_txn} WHERE uid = %d AND points = %d AND expirydate = %d";
-      $db_points = (int) db_result(db_query($sql, $user->uid, $points, $time['time']));
+      $sql = "SELECT points FROM {userpoints_txn} WHERE uid = %d AND points = %n AND expirydate = %d";
+      $db_points = (numeric) db_result(db_query($sql, $user->uid, $points, $time['time']));
       $this->assertTrue($db_points == $points,
         t($time['string'] ."Successfully verified points in the txn table.") );
       if ($db_points == $points) {
@@ -259,7 +259,7 @@ class UserpointsTestCase extends DrupalWebTestCase {
 
       /* Check update point to 'userpoints' table */
       $sql1 = "SELECT points FROM {userpoints} WHERE uid=%d";
-      $db_points = (int) db_result(db_query($sql1, $user->uid));
+      $db_points = (numeric) db_result(db_query($sql1, $user->uid));
       $this->assertTrue($db_points == $sum_points,
         t($time['string'] ."Successfully verified that the summary table was updated")
       );
@@ -303,11 +303,11 @@ class UserpointsTestCase extends DrupalWebTestCase {
 
     /* Check the user points removed or not if the point was expiration */
     $sql = "SELECT SUM(points) FROM {userpoints_txn} WHERE uid = %d";
-    $db_points = (int) db_result(db_query($sql, $user->uid));
+    $db_points = (numeric) db_result(db_query($sql, $user->uid));
     $this->assertTrue($db_points == $keep_points, t("Successfully removed expired points from the txn table.") );
 
     $sql = "SELECT points FROM {userpoints} WHERE uid=%d";
-    $db_points = (int) db_result(db_query($sql, $user->uid));
+    $db_points = (numeric) db_result(db_query($sql, $user->uid));
     $this->assertTrue($db_points == $keep_points, t("Successfully removed expired points from the summary table.") );
 
     // Load the expiry transaction from the database and verify that it does
@@ -414,8 +414,8 @@ class UserpointsTestCase extends DrupalWebTestCase {
     $this->drupalPost('admin/user/userpoints/add', $edit, 'Save');
 
     /* check database */
-    $sql = "SELECT points FROM {userpoints_txn} WHERE uid=%d AND points=%d";
-    $db_points = (int)db_result(db_query($sql, $admin_user->uid, $points));
+    $sql = "SELECT points FROM {userpoints_txn} WHERE uid=%d AND points=%n";
+    $db_points = (numeric)db_result(db_query($sql, $admin_user->uid, $points));
     $this->assertTrue($db_points == $points, t("Successful verified that points were added into database."));
 
     /* logout and change user */
@@ -445,8 +445,8 @@ class UserpointsTestCase extends DrupalWebTestCase {
 */
 
     /* check database */
-    $sql = "SELECT points FROM {userpoints_txn} WHERE uid=%d AND points=%d";
-    $db_points = (int)db_result(db_query($sql, $view_user->uid, $points));
+    $sql = "SELECT points FROM {userpoints_txn} WHERE uid=%d AND points=%n";
+    $db_points = (numeric)db_result(db_query($sql, $view_user->uid, $points));
     $this->assertTrue($db_points != $points, t("Successful verified that points do not add into database."));
     $this->drupalLogout();
   }
@@ -466,13 +466,13 @@ class UserpointsTestCase extends DrupalWebTestCase {
     $this->assertTrue($return['status'] == TRUE , t("1. (moderate=TRUE) API responded with successful grant of points"));
 
     /* Check the database to ensure the point were properly saved */
-    $sql = "SELECT points FROM {userpoints_txn} WHERE uid = %d AND points = %d AND status = 1";
-    $db_points = (int) db_result(db_query($sql, $user->uid, $points));
+    $sql = "SELECT points FROM {userpoints_txn} WHERE uid = %d AND points = %n AND status = 1";
+    $db_points = (numeric) db_result(db_query($sql, $user->uid, $points));
     $this->assertTrue($db_points == $points, t("1. (moderate=TRUE) Successfully verified points in the txn table and waiting moderation.") );
 
     /* Check do not update point to 'userpoints' table */
     $sql1 = "SELECT points FROM {userpoints} WHERE uid=%d";
-    $db_points = (int) db_result(db_query($sql1, $user->uid));
+    $db_points = (numeric) db_result(db_query($sql1, $user->uid));
     $this->assertTrue($db_points == 0, t("1. (moderate=TRUE) Successfully verified that points were added and the summary table was not updated.") );
 
 /*
@@ -485,12 +485,12 @@ class UserpointsTestCase extends DrupalWebTestCase {
     $return = userpoints_userpointsapi($params);
     $this->assertTrue($return['status'] == TRUE , t("6. (moderate=NULL) API responded with successful grant of points"));
 
-    $sql = "SELECT points FROM {userpoints_txn} WHERE uid = %d AND points = %d AND status = 1";
-    $db_points = (int) db_result(db_query($sql, $user->uid, $points));
+    $sql = "SELECT points FROM {userpoints_txn} WHERE uid = %d AND points = %n AND status = 1";
+    $db_points = (numeric) db_result(db_query($sql, $user->uid, $points));
     $this->assertTrue($db_points == $points,t("6. (moderate=NULL) Successfully verified points in the txn table and waiting moder.") );
 
     $sql1 = "SELECT points FROM {userpoints} WHERE uid=%d";
-    $db_points = (int) db_result(db_query($sql1, $user->uid));
+    $db_points = (numeric) db_result(db_query($sql1, $user->uid));
     $this->assertTrue($db_points == 0,t("6. (moderate=NULL) Successfully, Points added and does not modify summary table.") );
 
 */
@@ -506,8 +506,8 @@ class UserpointsTestCase extends DrupalWebTestCase {
     $this->assertTrue($return['status'] == TRUE , t("7. (moderate=FALSE) API responded with successful grant of points"));
 
     /* Check the database to ensure the point were properly saved */
-    $sql = "SELECT points FROM {userpoints_txn} WHERE uid = %d AND points = %d AND status = 0";
-    $db_points = (int) db_result(db_query($sql, $user->uid, $points));
+    $sql = "SELECT points FROM {userpoints_txn} WHERE uid = %d AND points = %n AND status = 0";
+    $db_points = (numeric) db_result(db_query($sql, $user->uid, $points));
     $this->assertTrue($db_points == $points, t("7. (moderate=FALSE) Successfully verified points in the txn table and NOT waiting moderation.") );
   }
 
diff --git userpoints.install userpoints.install
index c290f48..6ce0f88 100644
--- userpoints.install
+++ userpoints.install
@@ -22,13 +22,17 @@ function userpoints_schema() {
       ),
       'points' => array(
         'description' => 'Current Points',
-        'type' => 'int',
+        'type' => 'numeric',
+		'precision' => 9,
+		'scale' => 2,
         'not null' => TRUE,
         'default' => 0,
       ),
       'max_points' => array(
         'description' => 'Out of a maximum points',
-        'type' => 'int',
+        'type' => 'numeric',
+		'precision' => 9,
+		'scale' => 2,
         'not null' => TRUE,
         'default' => 0,
       ),
@@ -74,7 +78,9 @@ function userpoints_schema() {
       ),
       'points' => array(
         'description' => 'Points',
-        'type' => 'int',
+        'type' => 'numeric',
+		'precision' => 9,
+		'scale' => 2,
         'not null' => TRUE,
         'default' => 0,
       ),
@@ -281,3 +287,16 @@ function userpoints_update_6012() {
   db_add_index($ret, 'userpoints_txn', 'status_expired_expiry', array('status', 'expired', 'expirydate'));
   return $ret;
 }
+
+/*
+ * From: http://drupal.org/node/417830
+ * Points become numeric
+ */
+
+ function userpoints_update_6013() {
+ $ret = array();
+ db_change_field($ret, 'userpoints_txn', 'points', 'points', array('type' => 'numeric', 'precision' => 9, 'scale' => 2, 'not null' => true, 'default' => 0));
+ db_change_field($ret, 'userpoints', 'points', 'points', array('type' => 'numeric', 'precision' => 9, 'scale' => 2, 'not null' => true, 'default' => 0));
+ db_change_field($ret, 'userpoints', 'max_points', 'max_points', array('type' => 'numeric', 'precision' => 9, 'scale' => 2, 'not null' => true, 'default' => 0));
+ return $ret;
+ }
diff --git userpoints.module userpoints.module
index 3f38b60..ed2984f 100644
--- userpoints.module
+++ userpoints.module
@@ -481,9 +481,9 @@ function userpoints_get_current_points($uid = NULL, $tid = NULL) {
     $tid = userpoints_get_default_tid();
   }
   elseif ($tid == 'all') {
-    return (int)db_result(db_query('SELECT SUM(points) FROM {userpoints} WHERE uid = %d', $uid));
+    return (numeric)db_result(db_query('SELECT SUM(points) FROM {userpoints} WHERE uid = %d', $uid));
   }
-  return (int)db_result(db_query('SELECT points FROM {userpoints} WHERE uid = %d AND tid = %d', $uid, $tid));
+  return (numeric)db_result(db_query('SELECT points FROM {userpoints} WHERE uid = %d AND tid = %d', $uid, $tid));
 }
 
 /**
@@ -524,10 +524,10 @@ function userpoints_get_max_points($uid = NULL, $tid = NULL) {
 }
 
 /**
- * @param $params(array) or (int)
- *    if (int) assumed to be points for current user
+ * @param $params(array) or (numeric)
+ *    if (numeric) assumed to be points for current user
  *    Accepts an array of keyed variables and parameters
- *    'points' => # of points (int) (required)
+ *    'points' => # of points (numeric) (required)
  *    'moderate' => TRUE/FALSE
  *    'uid' => $user->uid
  *    'time_stamp' => unix time of the points assignement date
@@ -776,19 +776,19 @@ function _userpoints_update_cache(&$params) {
   }
 
   // Calculate the current points based upon the tid
-  $current_points = (int)$params['points'] + userpoints_get_current_points($params['uid'], $params['tid']);
+  $current_points = (numeric)$params['points'] + userpoints_get_current_points($params['uid'], $params['tid']);
   //Grab the user's maximum points to preserve it
   $max_points = db_result(db_query('SELECT max_points FROM {userpoints} WHERE uid = %d AND tid = %d',
     $params['uid'], $params['tid']));
   if ($params['points'] > 0) {
     //points are greater than zero, update their max_points
-    $max_points = (int)$params['points'] + (int)$max_points;
+    $max_points = (numeric)$params['points'] + (numeric)$max_points;
   }
 
   // insert or update the userpoints caching table with the user's current points
   if (_userpoints_user_exists($params['uid'], $params['tid'])) {
     db_query("UPDATE {userpoints}
-              SET points = %d, max_points = %d, last_update = %d
+              SET points = %n, max_points = %n, last_update = %d
               WHERE uid = %d AND tid = %d",
               $current_points,
               $max_points,
@@ -800,7 +800,7 @@ function _userpoints_update_cache(&$params) {
   else {
     $result = db_query("INSERT INTO {userpoints}
       (uid, points, max_points, last_update, tid)
-      VALUES (%d, %d, %d, %d, %d )",
+      VALUES (%d, %n, %n, %d, %d )",
       $params['uid'],
       $current_points,
       $max_points,
@@ -1700,7 +1700,7 @@ function userpoints_list_my_userpoints() {
   $args['approved_total'] = $grand_total;
 
   //Grab the unmoderated point total
-  $args['unapproved_total'] = (int)db_result(db_query("SELECT SUM(points) FROM {userpoints_txn} WHERE uid = %d AND status = 1", $uid));
+  $args['unapproved_total'] = (numeric)db_result(db_query("SELECT SUM(points) FROM {userpoints_txn} WHERE uid = %d AND status = 1", $uid));
   $args['overall_total'] = ($args['approved_total'] + $args['unapproved_total']);
 
   $header = array(
