diff --git a/modules/book/book.admin.inc b/modules/book/book.admin.inc
index 7b9dea3..cc687f6 100644
--- a/modules/book/book.admin.inc
+++ b/modules/book/book.admin.inc
@@ -174,10 +174,6 @@ function _book_admin_table($node, &$form) {
  * @see book_admin_edit()
  */
 function _book_admin_table_tree($tree, &$form) {
-  // The delta must be big enough to give each node a distinct value.
-  $count = count($tree);
-  $delta = ($count < 30) ? 15 : intval($count / 2) + 1;
-
   foreach ($tree as $data) {
     $form['book-admin-' . $data['link']['nid']] = array(
       '#item' => $data['link'],
@@ -191,11 +187,11 @@ function _book_admin_table_tree($tree, &$form) {
         '#size' => 40,
       ),
       'weight' => array(
-        '#type' => 'weight',
+        '#type' => 'textfield',
         '#default_value' => $data['link']['weight'],
-        '#delta' => max($delta, abs($data['link']['weight'])),
         '#title' => t('Weight for @title', array('@title' => $data['link']['title'])),
         '#title_display' => 'invisible',
+        '#element_validate' => array('_element_validate_integer'),
       ),
       'plid' => array(
         '#type' => 'hidden',
diff --git a/modules/book/book.module b/modules/book/book.module
index de9561f..16d0541 100644
--- a/modules/book/book.module
+++ b/modules/book/book.module
@@ -509,12 +509,11 @@ function _book_add_form_elements(&$form, &$form_state, $node) {
 
   $form['book']['plid'] = _book_parent_select($node->book);
 
-  // @see _book_admin_table_tree(). The weight may be larger than 15.
   $form['book']['weight'] = array(
-    '#type' => 'weight',
+    '#type' => 'textfield',
+    '#element_validate' => array('_element_validate_integer'),
     '#title' => t('Weight'),
     '#default_value' => $node->book['weight'],
-    '#delta' => max(15, abs($node->book['weight'])),
     '#weight' => 5,
     '#description' => t('Pages at a given level are ordered first by weight and then by title.'),
   );
