diff --git a/CHANGELOG.txt b/CHANGELOG.txt
index e8c50aa..e19901b 100644
--- a/CHANGELOG.txt
+++ b/CHANGELOG.txt
@@ -7,6 +7,7 @@ Apache Solr Search Integration 6.x-1.x, xxxx-xx-xx
 
 Apache Solr Search Integration 6.x-1.3, xxxx-xx-xx
 ------------------------------
+#993476 by jpmckinney, pwolanin: allow arbitrary results per page in the 0-200 range.
 #891962 by Network, pwolanin: Solr_Base_Query->parse_filters() causes filters to disappear when using or search on taxonomy id's.
 #903802 by jpmckinney: BLOCK_CACHE_PER_PAGE conflicts with theme_apachesolr_facet_list.
 #882638 by pwolanin, jpmckinney: Clean the text inside indexed tags.
diff --git a/apachesolr.admin.inc b/apachesolr.admin.inc
index 4a7652a..d63b21c 100644
--- a/apachesolr.admin.inc
+++ b/apachesolr.admin.inc
@@ -54,12 +54,10 @@ function apachesolr_settings() {
     '#description' => t('The maximum number of items indexed in each pass of a <a href="@cron">cron maintenance task</a>. If necessary, reduce the number of items to prevent timeouts and memory errors while indexing.', array('@cron' => url('admin/reports/status')))
   );
 
-  $options = drupal_map_assoc(array(5, 10, 15, 20, 25, 30, 40, 50, 60, 70, 80, 90, 100));
   $form['apachesolr_rows'] = array(
-    '#type' => 'select',
+    '#type' => 'textfield',
     '#title' => t('Results per page'),
     '#default_value' => variable_get('apachesolr_rows', 10),
-    '#options' => $options,
     '#description' => t('The number of results that will be shown per page.'),
   );
   $form['apachesolr_failure'] = array(
@@ -116,6 +114,17 @@ function apachesolr_settings_validate($form, &$form_state) {
       $form_state['values']['apachesolr_path'] = '/' . trim($form_state['values']['apachesolr_path'], "/ \t\r\n\0\x0B");
     }
   }
+
+  $intval = intval($form_state['values']['apachesolr_rows']);
+  // TODO: does the max need to be variable?
+  $max = 200;
+  if (!is_numeric($form_state['values']['apachesolr_rows']) || $intval < 0 || $intval > $max) {
+    form_set_error('apachesolr_rows', t('Results per page should be non-negative integer less than @max.', array('@max' => $max)));
+  }
+  else {
+    // Set the integer value as the one we are saving to the variable.
+    $form_state['values']['apachesolr_rows'] = $intval;
+  }
 }
 
 /**
