diff --git a/includes/ajax.inc b/includes/ajax.inc
index fb07477..c66f5d4 100644
--- a/includes/ajax.inc
+++ b/includes/ajax.inc
@@ -497,6 +497,8 @@ function ajax_deliver($page_callback_result) {
  *
  * @return
  *   An Ajax commands array that can be passed to ajax_render().
+ *
+ * @since Function added in 7.2.
  */
 function ajax_prepare_response($page_callback_result) {
   $commands = array();
diff --git a/includes/bootstrap.inc b/includes/bootstrap.inc
index 5556f38..b03e1fc 100644
--- a/includes/bootstrap.inc
+++ b/includes/bootstrap.inc
@@ -283,6 +283,8 @@ define('DRUPAL_PHP_FUNCTION_PATTERN', '[a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*'
  * example by overriding offsetSet() and adding an automatic call to persist().
  *
  * @see SchemaCache
+ *
+ * @since Class added in 7.8.
  */
 abstract class DrupalCacheArray implements ArrayAccess {
 
@@ -1529,6 +1531,8 @@ function t($string, array $args = array(), array $options = array()) {
  *
  * @see t()
  * @ingroup sanitization
+ *
+ * @since Function added in 7.9.
  */
 function format_string($string, array $args = array()) {
   // Transform arguments before inserting them.
@@ -2487,6 +2491,8 @@ function drupal_maintenance_theme() {
  *
  * Paths to dynamically-generated content, such as image styles, should also be
  * accounted for in this function.
+ *
+ * @since Function added in 7.9.
  */
 function drupal_fast_404() {
   $exclude_paths = variable_get('404_fast_paths_exclude', FALSE);
@@ -2856,6 +2862,8 @@ function drupal_get_schema($table = NULL, $rebuild = FALSE) {
 
 /**
  * Extends DrupalCacheArray to allow for dynamic building of the schema cache.
+ *
+ * @since Class added in 7.8.
  */
 class SchemaCache extends DrupalCacheArray {
 
@@ -2887,6 +2895,8 @@ class SchemaCache extends DrupalCacheArray {
  *
  * @param $rebuild
  *   If true, the schema will be rebuilt instead of retrieved from the cache.
+ *
+ * @since Function added in 7.8.
  */
 function drupal_get_complete_schema($rebuild = FALSE) {
   static $schema = array();
diff --git a/includes/common.inc b/includes/common.inc
index ce08390..32ff573 100644
--- a/includes/common.inc
+++ b/includes/common.inc
@@ -5995,6 +5995,8 @@ function drupal_render_cache_set(&$markup, $elements) {
  *
  * @return
  *   The #attached array for this element and its descendants.
+ *
+ * @since Function added in 7.2.
  */
 function drupal_render_collect_attached($elements, $return = FALSE) {
   $attached = &drupal_static(__FUNCTION__, array());
@@ -7667,6 +7669,8 @@ function entity_get_controller($entity_type) {
  * @param $langcode
  *   (optional) A language code to be used for rendering. Defaults to the global
  *   content language of the current request.
+ *
+ * @since Argument $langcode added in 7.2.
  */
 function entity_prepare_view($entity_type, $entities, $langcode = NULL) {
   if (!isset($langcode)) {
diff --git a/includes/database/database.inc b/includes/database/database.inc
index 6efe298..6a876b3 100644
--- a/includes/database/database.inc
+++ b/includes/database/database.inc
@@ -283,6 +283,8 @@ abstract class DatabaseConnection extends PDO {
    * List of search values for use in prefixTables().
    *
    * @var array
+   *
+   * @since Property added in 7.4.
    */
   protected $prefixSearch = array();
 
@@ -290,6 +292,8 @@ abstract class DatabaseConnection extends PDO {
    * List of replacement values for use in prefixTables().
    *
    * @var array
+   *
+   * @since Property added in 7.4.
    */
   protected $prefixReplace = array();
 
@@ -563,6 +567,8 @@ abstract class DatabaseConnection extends PDO {
    *
    * @return
    *   A sanitized comment string.
+   *
+   * @since Function added in 7.2.
    */
   public function makeComment($comments) {
     if (empty($comments))
@@ -605,6 +611,8 @@ abstract class DatabaseConnection extends PDO {
    *
    * @return
    *   A sanitized version of the query comment string.
+   *
+   * @since Function added in 7.2.
    */
   protected function filterComment($comment = '') {
     return preg_replace('/(\/\*\s*)|(\s*\*\/)/', '', $comment);
@@ -1111,6 +1119,8 @@ abstract class DatabaseConnection extends PDO {
 
   /**
    * Internal function: commit all the transaction layers that can commit.
+   *
+   * @since Function added in 7.8.
    */
   protected function popCommittableTransactions() {
     // Commit all the committable layers.
@@ -1771,6 +1781,8 @@ class DatabaseTransactionExplicitCommitNotAllowedException extends Exception { }
 
 /**
  * Exception thrown when a rollback() resulted in other active transactions being rolled-back.
+ *
+ * @since Class added in 7.8.
  */
 class DatabaseTransactionOutOfOrderException extends Exception { }
 
diff --git a/includes/database/mysql/database.inc b/includes/database/mysql/database.inc
index e024a7f..dfc942f 100644
--- a/includes/database/mysql/database.inc
+++ b/includes/database/mysql/database.inc
@@ -152,6 +152,10 @@ class DatabaseConnection_mysql extends DatabaseConnection {
 
   /**
    * Overridden to work around issues to MySQL not supporting transactional DDL.
+   *
+   * @since Function added in 7.4.
+   * @since Function changed from public in 7.8.
+   * @since Function renamed from popTransaction in 7.8.
    */
   protected function popCommittableTransactions() {
     // Commit all the committable layers.
diff --git a/includes/database/prefetch.inc b/includes/database/prefetch.inc
index 4f2b19d..dcb235a 100644
--- a/includes/database/prefetch.inc
+++ b/includes/database/prefetch.inc
@@ -370,6 +370,9 @@ class DatabaseStatementPrefetch implements Iterator, DatabaseStatementInterface
     }
   }
 
+  /**
+   * @since Function added in 7.9.
+   */
   public function fetchColumn($index = 0) {
     if (isset($this->currentRow) && isset($this->columnNames[$index])) {
       // We grab the value directly from $this->data, and format it.
diff --git a/includes/database/query.inc b/includes/database/query.inc
index 750aea7..6d5d3c2 100644
--- a/includes/database/query.inc
+++ b/includes/database/query.inc
@@ -155,6 +155,8 @@ interface QueryConditionInterface {
    *
    * @return
    *   TRUE if the condition has been previously compiled.
+   *
+   * @since Function added in 7.8.
    */
   public function compiled();
 }
@@ -254,6 +256,8 @@ interface QueryPlaceholderInterface {
 
   /**
    * Returns a unique identifier for this object.
+   *
+   * @since Function added in 7.8.
    */
   public function uniqueIdentifier();
 
@@ -304,6 +308,8 @@ abstract class Query implements QueryPlaceholderInterface {
 
   /**
    * A unique identifier for this query object.
+   *
+   * @since Property added in 7.8.
    */
   protected $uniqueIdentifier;
 
@@ -355,6 +361,8 @@ abstract class Query implements QueryPlaceholderInterface {
 
   /**
    * Implements the magic __clone function.
+   *
+   * @since Function added in 7.8.
    */
   public function __clone() {
     $this->uniqueIdentifier = uniqid('', TRUE);
@@ -378,6 +386,8 @@ abstract class Query implements QueryPlaceholderInterface {
 
   /**
    * Returns a unique identifier for this object.
+   *
+   * @since Function added in 7.8.
    */
   public function uniqueIdentifier() {
     return $this->uniqueIdentifier;
@@ -836,6 +846,8 @@ class DeleteQuery extends Query implements QueryConditionInterface {
 
   /**
    * Implements QueryConditionInterface::compiled().
+   *
+   * @since Function added in 7.8.
    */
   public function compiled() {
     return $this->condition->compiled();
@@ -917,6 +929,8 @@ class TruncateQuery extends Query {
 
   /**
    * Implements QueryConditionInterface::compiled().
+   *
+   * @since Function added in 7.8.
    */
   public function compiled() {
     return $this->condition->compiled();
@@ -1085,6 +1099,8 @@ class UpdateQuery extends Query implements QueryConditionInterface {
 
   /**
    * Implements QueryConditionInterface::compiled().
+   *
+   * @since Function added in 7.8.
    */
   public function compiled() {
     return $this->condition->compiled();
@@ -1577,6 +1593,8 @@ class MergeQuery extends Query implements QueryConditionInterface {
 
   /**
    * Implements QueryConditionInterface::compiled().
+   *
+   * @since Function added in 7.8.
    */
   public function compiled() {
     return $this->condition->compiled();
@@ -1678,6 +1696,8 @@ class DatabaseCondition implements QueryConditionInterface, Countable {
 
   /**
    * The identifier of the query placeholder this condition has been compiled against.
+   *
+   * @since Property added in 7.8.
    */
   protected $queryPlaceholderIdentifier;
 
@@ -1870,6 +1890,8 @@ class DatabaseCondition implements QueryConditionInterface, Countable {
 
   /**
    * Implements QueryConditionInterface::compiled().
+   *
+   * @since Function added in 7.8.
    */
   public function compiled() {
     return !$this->changed;
diff --git a/includes/database/schema.inc b/includes/database/schema.inc
index b7ae970..0e0a207 100644
--- a/includes/database/schema.inc
+++ b/includes/database/schema.inc
@@ -179,6 +179,8 @@ abstract class DatabaseSchema implements QueryPlaceholderInterface {
 
   /**
    * A unique identifier for this query object.
+   *
+   * @since Property added in 7.8.
    */
   protected $uniqueIdentifier;
 
@@ -189,6 +191,8 @@ abstract class DatabaseSchema implements QueryPlaceholderInterface {
 
   /**
    * Implements the magic __clone function.
+   *
+   * @since Function added in 7.8.
    */
   public function __clone() {
     $this->uniqueIdentifier = uniqid('', TRUE);
@@ -196,6 +200,8 @@ abstract class DatabaseSchema implements QueryPlaceholderInterface {
 
   /**
    * Implements QueryPlaceHolderInterface::uniqueIdentifier().
+   *
+   * @since Function added in 7.8.
    */
   public function uniqueIdentifier() {
     return $this->uniqueIdentifier;
diff --git a/includes/database/select.inc b/includes/database/select.inc
index 7e2af85..fd28584 100644
--- a/includes/database/select.inc
+++ b/includes/database/select.inc
@@ -550,6 +550,8 @@ class SelectQueryExtender implements SelectQueryInterface {
 
   /**
    * A unique identifier for this query object.
+   *
+   * @since Property added in 7.8.
    */
   protected $uniqueIdentifier;
 
@@ -566,6 +568,8 @@ class SelectQueryExtender implements SelectQueryInterface {
 
   /**
    * Implements QueryPlaceholderInterface::uniqueIdentifier().
+   *
+   * @since Function added in 7.8.
    */
   public function uniqueIdentifier() {
     return $this->uniqueIdentifier;
@@ -632,6 +636,9 @@ class SelectQueryExtender implements SelectQueryInterface {
     return $this->query->compile($connection, $queryPlaceholder);
   }
 
+  /**
+   * @since Function added in 7.8.
+   */
   public function compiled() {
     return $this->query->compiled();
   }
@@ -1086,6 +1093,9 @@ class SelectQuery extends Query implements SelectQueryInterface {
     }
   }
 
+  /**
+   * @since Function added in 7.8.
+   */
   public function compiled() {
     if (!$this->where->compiled() || !$this->having->compiled()) {
       return FALSE;
diff --git a/includes/entity.inc b/includes/entity.inc
index b2d5079..c729643 100644
--- a/includes/entity.inc
+++ b/includes/entity.inc
@@ -469,6 +469,8 @@ class EntityFieldQuery {
    *
    * @see EntityFieldQuery::fieldLanguageCondition()
    * @see EntityFieldQuery::fielDeltaCondition()
+   *
+   * @since Property added in 7.6.
    */
   public $fieldMetaConditions = array();
 
@@ -655,6 +657,8 @@ class EntityFieldQuery {
    *
    * @see EntityFieldQuery::addFieldCondition
    * @see EntityFieldQuery::deleted
+   *
+   * @since Function added in 7.6.
    */
   public function fieldCondition($field, $column = NULL, $value = NULL, $operator = NULL, $delta_group = NULL, $language_group = NULL) {
     return $this->addFieldCondition($this->fieldConditions, $field, $column, $value, $operator, $delta_group, $language_group);
@@ -681,6 +685,8 @@ class EntityFieldQuery {
    *
    * @see EntityFieldQuery::addFieldCondition
    * @see EntityFieldQuery::deleted
+   *
+   * @since Function added in 7.6.
    */
   public function fieldLanguageCondition($field, $value = NULL, $operator = NULL, $delta_group = NULL, $language_group = NULL) {
     return $this->addFieldCondition($this->fieldMetaConditions, $field, 'language', $value, $operator, $delta_group, $language_group);
@@ -707,6 +713,8 @@ class EntityFieldQuery {
    *
    * @see EntityFieldQuery::addFieldCondition
    * @see EntityFieldQuery::deleted
+   *
+   * @since Function added in 7.6.
    */
   public function fieldDeltaCondition($field, $value = NULL, $operator = NULL, $delta_group = NULL, $language_group = NULL) {
     return $this->addFieldCondition($this->fieldMetaConditions, $field, 'delta', $value, $operator, $delta_group, $language_group);
@@ -754,6 +762,10 @@ class EntityFieldQuery {
    *
    * @return EntityFieldQuery
    *   The called object.
+   *
+   * @since Function changed from public in 7.6.
+   * @since Function renamed from fieldCondition in 7.6.
+   * @since Argument &$conditions added in 7.6.
    */
   protected function addFieldCondition(&$conditions, $field, $column = NULL, $value = NULL, $operator = NULL, $delta_group = NULL, $language_group = NULL) {
     // The '!=' operator is deprecated in favour of the '<>' operator since the
@@ -1350,5 +1362,7 @@ class EntityFieldQuery {
 
 /**
  * Exception thrown when a malformed entity is passed.
+ *
+ * @since Class added in 7.8.
  */
 class EntityMalformedException extends Exception { }
diff --git a/includes/file.inc b/includes/file.inc
index 7ec13f3..dd0ec41 100644
--- a/includes/file.inc
+++ b/includes/file.inc
@@ -1587,6 +1587,8 @@ function file_save_upload($source, $validators = array(), $destination = FALSE,
  * @see move_uploaded_file()
  * @see http://drupal.org/node/515192
  * @ingroup php_wrappers
+ *
+ * @since Function added in 7.8.
  */
 function drupal_move_uploaded_file($filename, $uri) {
   $result = @move_uploaded_file($filename, $uri);
@@ -2281,6 +2283,8 @@ function drupal_dirname($uri) {
  * @see basename()
  *
  * @ingroup php_wrappers
+ *
+ * @since Function added in 7.12.
  */
 function drupal_basename($uri, $suffix = NULL) {
   $separators = '/';
diff --git a/includes/form.inc b/includes/form.inc
index ea9afbe..dc82baf 100644
--- a/includes/form.inc
+++ b/includes/form.inc
@@ -4125,6 +4125,8 @@ function _form_set_class(&$element, $class = array()) {
 
 /**
  * Form element validation handler for integer elements.
+ *
+ * @since Function added in 7.8.
  */
 function element_validate_integer($element, &$form_state) {
   $value = $element['#value'];
@@ -4135,6 +4137,8 @@ function element_validate_integer($element, &$form_state) {
 
 /**
  * Form element validation handler for integer elements that must be positive.
+ *
+ * @since Function added in 7.8.
  */
 function element_validate_integer_positive($element, &$form_state) {
   $value = $element['#value'];
@@ -4145,6 +4149,8 @@ function element_validate_integer_positive($element, &$form_state) {
 
 /**
  * Form element validation handler for number elements.
+ *
+ * @since Function added in 7.8.
  */
 function element_validate_number($element, &$form_state) {
   $value = $element['#value'];
diff --git a/includes/image.inc b/includes/image.inc
index f6ae7f1..dc96199 100644
--- a/includes/image.inc
+++ b/includes/image.inc
@@ -199,6 +199,8 @@ function image_scale_and_crop(stdClass $image, $width, $height) {
  *   TRUE if $dimensions was modified, FALSE otherwise.
  *
  * @see image_scale()
+ *
+ * @since Function added in 7.9.
  */
 function image_dimensions_scale(array &$dimensions, $width = NULL, $height = NULL, $upscale = FALSE) {
   $aspect = $dimensions['height'] / $dimensions['width'];
diff --git a/includes/install.inc b/includes/install.inc
index 6411f8f..971fe46 100644
--- a/includes/install.inc
+++ b/includes/install.inc
@@ -1039,6 +1039,8 @@ function install_goto($path) {
  *   through check_url() if it will be used as an HTML attribute value.
  *
  * @see drupal_requirements_url()
+ *
+ * @since Function added in 7.10.
  */
 function drupal_current_script_url($query = array()) {
   $uri = $_SERVER['SCRIPT_NAME'];
@@ -1066,6 +1068,8 @@ function drupal_current_script_url($query = array()) {
  *   be used as an HTML attribute value.
  *
  * @see drupal_current_script_url()
+ *
+ * @since Function added in 7.10.
  */
 function drupal_requirements_url($severity) {
   $query = array();
diff --git a/includes/json-encode.inc b/includes/json-encode.inc
index 1efd6dd..9c21b97 100644
--- a/includes/json-encode.inc
+++ b/includes/json-encode.inc
@@ -9,6 +9,8 @@
  * Encodes a PHP variable to HTML-safe JSON for PHP versions below 5.3.0.
  *
  * @see drupal_json_encode()
+ *
+ * @since Function added in 7.12.
  */
 function drupal_json_encode_helper($var) {
   switch (gettype($var)) {
diff --git a/includes/language.inc b/includes/language.inc
index 20909f5..c0e6bbc 100644
--- a/includes/language.inc
+++ b/includes/language.inc
@@ -85,6 +85,8 @@ function language_types_disable($types) {
 
 /**
  * Updates the language type configuration.
+ *
+ * @since Function added in 7.2.
  */
 function language_types_set() {
   // Ensure that we are getting the defined language negotiation information. An
@@ -213,6 +215,8 @@ function language_negotiation_get_switch_links($type, $path) {
 
 /**
  * Updates language configuration to remove any language provider that is no longer defined.
+ *
+ * @since Function added in 7.2.
  */
 function language_negotiation_purge() {
   // Ensure that we are getting the defined language negotiation information. An
diff --git a/includes/menu.inc b/includes/menu.inc
index fef40bb..726205c 100644
--- a/includes/menu.inc
+++ b/includes/menu.inc
@@ -1155,6 +1155,8 @@ function menu_tree_all_data($menu_name, $link = NULL, $max_depth = NULL) {
  *   The name of the affected menu tree.
  * @param $path
  *   The path to use when finding the active trail.
+ *
+ * @since Function added in 7.9.
  */
 function menu_tree_set_path($menu_name, $path = NULL) {
   $paths = &drupal_static(__FUNCTION__);
@@ -1173,6 +1175,8 @@ function menu_tree_set_path($menu_name, $path = NULL) {
  * @return
  *   A string containing the path. If no path has been specified with
  *   menu_tree_set_path(), NULL is returned.
+ *
+ * @since Function added in 7.9.
  */
 function menu_tree_get_path($menu_name) {
   return menu_tree_set_path($menu_name);
@@ -3037,6 +3041,9 @@ function _menu_delete_item($item, $force = FALSE) {
  * @return
  *   The mlid of the saved menu link, or FALSE if the menu link could not be
  *   saved.
+ *
+ * @since Argument $existing_item added in 7.6.
+ * @since Argument $parent_candidates added in 7.6.
  */
 function menu_link_save(&$item, $existing_item = array(), $parent_candidates = array()) {
   drupal_alter('menu_link', $item);
@@ -3209,6 +3216,8 @@ function menu_link_save(&$item, $existing_item = array(), $parent_candidates = a
  * @return
  *   A menu link structure of the possible parent or FALSE if no valid parent
  *   has been found.
+ *
+ * @since Argument $parent_candidates added in 7.6.
  */
 function _menu_link_find_parent($menu_link, $parent_candidates = array()) {
   $parent = FALSE;
diff --git a/includes/module.inc b/includes/module.inc
index 77e35b7..42e5cb4 100644
--- a/includes/module.inc
+++ b/includes/module.inc
@@ -786,6 +786,9 @@ function module_implements_write_cache() {
  *
  * @return
  *   The return value of the hook implementation.
+ *
+ * @since Argument $module added in 7.9.
+ * @since Argument $hook added in 7.9.
  */
 function module_invoke($module, $hook) {
   $args = func_get_args();
@@ -807,6 +810,8 @@ function module_invoke($module, $hook) {
  * @return
  *   An array of return values of the hook implementations. If modules return
  *   arrays from their implementations, those are merged into one array.
+ *
+ * @since Argument $hook added in 7.9.
  */
 function module_invoke_all($hook) {
   $args = func_get_args();
diff --git a/includes/theme.inc b/includes/theme.inc
index 0712f87..ecbe22b 100644
--- a/includes/theme.inc
+++ b/includes/theme.inc
@@ -250,6 +250,8 @@ function _drupal_theme_initialize($theme, $base_theme = array(), $registry_callb
  * @return
  *   The complete theme registry array, or an instance of the ThemeRegistry
  *   class.
+ *
+ * @since Argument $complete added in 7.10.
  */
 function theme_get_registry($complete = TRUE) {
   static $theme_registry = array();
@@ -298,6 +300,8 @@ function _theme_registry_callback($callback = NULL, array $arguments = array())
  *
  * @return
  *   The theme registry array, or an instance of the ThemeRegistry class.
+ *
+ * @since Argument $complete added in 7.10.
  */
 function _theme_load_registry($theme, $base_theme = NULL, $theme_engine = NULL, $complete = TRUE) {
   if ($complete) {
@@ -345,6 +349,8 @@ function drupal_theme_rebuild() {
  * complete registry, while internally caching only the parts of the registry
  * that are actually in use on the site. On cache misses the complete
  * theme registry is loaded and used to update the run-time cache.
+ *
+ * @since Class added in 7.10.
  */
 class ThemeRegistry Extends DrupalCacheArray {
 
@@ -390,6 +396,8 @@ class ThemeRegistry Extends DrupalCacheArray {
    * @return
    *   An array with the keys of the full theme registry, but the values
    *   initialized to NULL.
+   *
+   * @since Function added in 7.12.
    */
   function initializeRegistry() {
     $this->completeRegistry = theme_get_registry();
diff --git a/misc/drupal.js b/misc/drupal.js
index 83b0884..bf9a290 100644
--- a/misc/drupal.js
+++ b/misc/drupal.js
@@ -143,6 +143,8 @@ Drupal.checkPlain = function (str) {
  *
  * @see Drupal.t()
  * @ingroup sanitization
+ *
+ * @since Function added in 7.9.
  */
 Drupal.formatString = function(str, args) {
   // Transform arguments before inserting them.
@@ -184,6 +186,8 @@ Drupal.formatString = function(str, args) {
  *
  * @return
  *   The translated string.
+ *
+ * @since Argument 'options' added in 7.10.
  */
 Drupal.t = function (str, args, options) {
   options = options || {};
@@ -228,6 +232,8 @@ Drupal.t = function (str, args, options) {
  *   The options to pass to the Drupal.t() function.
  * @return
  *   A translated string.
+ *
+ * @since Argument 'options' added in 7.10.
  */
 Drupal.formatPlural = function (count, singular, plural, args, options) {
   var args = args || {};
diff --git a/modules/color/color.module b/modules/color/color.module
index c58d6ec..2db69f6 100644
--- a/modules/color/color.module
+++ b/modules/color/color.module
@@ -298,6 +298,8 @@ function theme_color_scheme_form($variables) {
  * Form validation handler for color_scheme_form().
  *
  * @see color_scheme_form_submit()
+ *
+ * @since Function added in 7.1.
  */
 function color_scheme_form_validate($form, &$form_state) {
   // Only accept hexadecimal CSS color strings to avoid XSS upon use.
diff --git a/modules/comment/comment.module b/modules/comment/comment.module
index e553087..e08f20b 100644
--- a/modules/comment/comment.module
+++ b/modules/comment/comment.module
@@ -1650,6 +1650,8 @@ function comment_delete_multiple($cids) {
  * @see EntityFieldQuery
  *
  * @todo Remove $conditions in Drupal 8.
+ *
+ * @since Argument $reset added in 7.9.
  */
 function comment_load_multiple($cids = array(), $conditions = array(), $reset = FALSE) {
   return entity_load('comment', $cids, $conditions, $reset);
@@ -1666,6 +1668,8 @@ function comment_load_multiple($cids = array(), $conditions = array(), $reset =
  *
  * @return
  *   The comment object.
+ *
+ * @since Argument $reset added in 7.9.
  */
 function comment_load($cid, $reset = FALSE) {
   $comment = comment_load_multiple(array($cid), array(), $reset);
diff --git a/modules/field/field.api.php b/modules/field/field.api.php
index 774d8b5..d71acf0 100644
--- a/modules/field/field.api.php
+++ b/modules/field/field.api.php
@@ -870,6 +870,8 @@ function hook_field_widget_form(&$form, &$form_state, $field, $instance, $langco
  *
  * @see hook_field_widget_form()
  * @see hook_field_widget_WIDGET_TYPE_form_alter
+ *
+ * @since Function added in 7.8.
  */
 function hook_field_widget_form_alter(&$element, &$form_state, $context) {
   // Add a css class to widget form elements for all fields of type mytype.
@@ -904,6 +906,8 @@ function hook_field_widget_form_alter(&$element, &$form_state, $context) {
  *
  * @see hook_field_widget_form()
  * @see hook_field_widget_form_alter()
+ *
+ * @since Function added in 7.8.
  */
 function hook_field_widget_WIDGET_TYPE_form_alter(&$element, &$form_state, $context) {
   // Code here will only act on widgets of type WIDGET_TYPE.  For example,
@@ -2534,6 +2538,8 @@ function hook_field_read_instance($instance) {
  *
  * @param $field
  *   The field being purged.
+ *
+ * @since Function reneamed from hook_field_purge_field_instance in 7.9.
  */
 function hook_field_purge_field($field) {
   db_delete('my_module_field_info')
diff --git a/modules/field/field.attach.inc b/modules/field/field.attach.inc
index a5a1e8e..12f7386 100644
--- a/modules/field/field.attach.inc
+++ b/modules/field/field.attach.inc
@@ -1093,6 +1093,8 @@ function field_attach_delete_revision($entity_type, $entity) {
  * @param $langcode
  *   (Optional) The language the field values are to be shown in. If no language
  *   is provided the current language is used.
+ *
+ * @since Argument $langcode added in 7.2.
  */
 function field_attach_prepare_view($entity_type, $entities, $view_mode, $langcode = NULL) {
   $options = array('language' => array());
diff --git a/modules/field/field.module b/modules/field/field.module
index 9b7f819..5c051a2 100644
--- a/modules/field/field.module
+++ b/modules/field/field.module
@@ -358,6 +358,8 @@ function field_modules_uninstalled($modules) {
  *
  * Goes through a list of all modules that provide a field type, and makes them
  * required if there are any active fields of that type.
+ *
+ * @since Function added in 7.8.
  */
 function field_system_info_alter(&$info, $file, $type) {
   if ($type == 'module' && module_hook($file->name, 'field_info')) {
@@ -419,6 +421,8 @@ function field_modules_disabled($modules) {
 
 /**
  * Refreshes the 'active' and 'storage_active' columns for fields.
+ *
+ * @since Function added in 7.8.
  */
 function field_sync_field_status() {
   // Refresh the 'active' and 'storage_active' columns according to the current
diff --git a/modules/field/modules/field_sql_storage/field_sql_storage.module b/modules/field/modules/field_sql_storage/field_sql_storage.module
index 2ed7835..a68c324 100644
--- a/modules/field/modules/field_sql_storage/field_sql_storage.module
+++ b/modules/field/modules/field_sql_storage/field_sql_storage.module
@@ -614,6 +614,8 @@ function _field_sql_storage_query_join_entity(SelectQuery $select_query, $entity
  * @param $column_callback
  *   A callback that should return the column name to be used for the field
  *   conditions. Accepts a field name and a field column name as parameters.
+ *
+ * @since Function added in 7.6.
  */
 function _field_sql_storage_query_field_conditions(EntityFieldQuery $query, SelectQuery $select_query, $conditions, $table_aliases, $column_callback) {
   $groups = &drupal_static(__FUNCTION__, array());
@@ -640,6 +642,8 @@ function _field_sql_storage_query_field_conditions(EntityFieldQuery $query, Sele
 
 /**
  * Field meta condition column callback.
+ *
+ * @since Function added in 7.6.
  */
 function _field_sql_storage_query_columnname($field_name, $column) {
   return $column;
diff --git a/modules/field/modules/options/options.api.php b/modules/field/modules/options/options.api.php
index 6837444..5cb767d 100644
--- a/modules/field/modules/options/options.api.php
+++ b/modules/field/modules/options/options.api.php
@@ -29,6 +29,8 @@
  *   options.module takes care of sanitation according to the needs of each
  *   widget. The HTML tags defined in _field_filter_xss_allowed_tags() are
  *   allowed, other tags will be filtered.
+ *
+ * @since Argument $instance added in 7.9.
  */
 function hook_options_list($field, $instance = NULL) {
   // Sample structure.
diff --git a/modules/field_ui/field_ui.module b/modules/field_ui/field_ui.module
index 7bfb4fa..f9bcec2 100644
--- a/modules/field_ui/field_ui.module
+++ b/modules/field_ui/field_ui.module
@@ -48,6 +48,8 @@ function field_ui_help($path, $arg) {
 
 /**
  * Implements hook_field_attach_rename_bundle().
+ *
+ * @since Function added in 7.9.
  */
 function field_ui_field_attach_rename_bundle($entity_type, $bundle_old, $bundle_new) {
   // The Field UI relies on entity_get_info() to build menu items for entity
diff --git a/modules/image/image.effects.inc b/modules/image/image.effects.inc
index 35a6a74..5ec291b 100644
--- a/modules/image/image.effects.inc
+++ b/modules/image/image.effects.inc
@@ -96,6 +96,8 @@ function image_resize_effect(&$image, $data) {
  *   following items:
  *   - "width": An integer representing the desired width in pixels.
  *   - "height": An integer representing the desired height in pixels.
+ *
+ * @since Function added in 7.9.
  */
 function image_resize_dimensions(array &$dimensions, array $data) {
   // The new image will have the exact dimensions defined for the effect.
@@ -149,6 +151,8 @@ function image_scale_effect(&$image, $data) {
  *   - "height": An integer representing the desired height in pixels.
  *   - "upscale": A boolean indicating that the image should be upscaled if the
  *     dimensions are larger than the original image.
+ *
+ * @since Function added in 7.9.
  */
 function image_scale_dimensions(array &$dimensions, array $data) {
   if ($dimensions['width'] && $dimensions['height']) {
@@ -297,6 +301,8 @@ function image_rotate_effect(&$image, $data) {
  *   - "random": A boolean indicating that a random rotation angle should be
  *     used for this image. The angle specified in "degrees" is used as a
  *     positive and negative maximum.
+ *
+ * @since Function added in 7.9.
  */
 function image_rotate_dimensions(array &$dimensions, array $data) {
   // If the rotate is not random and the angle is a multiple of 90 degrees,
diff --git a/modules/image/image.module b/modules/image/image.module
index 5079cba..f9a1d13 100644
--- a/modules/image/image.module
+++ b/modules/image/image.module
@@ -416,6 +416,8 @@ function image_image_style_delete($style) {
 
 /**
  * Implements hook_field_delete_field().
+ *
+ * @since Function added in 7.4.
  */
 function image_field_delete_field($field) {
   if ($field['type'] != 'image') {
@@ -431,6 +433,8 @@ function image_field_delete_field($field) {
 
 /**
  * Implements hook_field_update_field().
+ *
+ * @since Function added in 7.4.
  */
 function image_field_update_field($field, $prior_field, $has_data) {
   if ($field['type'] != 'image') {
@@ -823,6 +827,8 @@ function image_style_create_derivative($style, $source, $destination) {
  * @param $dimensions
  *   Dimensions to be modified - an array with components width and height, in
  *   pixels.
+ *
+ * @since Function added in 7.9.
  */
 function image_style_transform_dimensions($style_name, array &$dimensions) {
   module_load_include('inc', 'image', 'image.effects');
diff --git a/modules/locale/locale.module b/modules/locale/locale.module
index 43c5e13..7d6b7be 100644
--- a/modules/locale/locale.module
+++ b/modules/locale/locale.module
@@ -598,6 +598,8 @@ function locale_language_negotiation_info() {
 
 /**
  * Implements hook_modules_enabled().
+ *
+ * @since Function added in 7.2.
  */
 function locale_modules_enabled($modules) {
   include_once DRUPAL_ROOT . '/includes/language.inc';
@@ -607,6 +609,8 @@ function locale_modules_enabled($modules) {
 
 /**
  * Implements hook_modules_disabled().
+ *
+ * @since Function added in 7.2.
  */
 function locale_modules_disabled($modules) {
   locale_modules_enabled($modules);
@@ -801,6 +805,8 @@ function locale_language_list($field = 'name', $all = FALSE) {
 
 /**
  * Implements hook_modules_installed().
+ *
+ * @since Function added in 7.2.
  */
 function locale_modules_installed($modules) {
   locale_system_update($modules);
@@ -811,6 +817,8 @@ function locale_modules_installed($modules) {
  *
  * @todo This is technically wrong. We must not import upon enabling, but upon
  *   initial installation. The theme system is missing an installation hook.
+ *
+ * @since Function added in 7.2.
  */
 function locale_themes_enabled($themes) {
   locale_system_update($themes);
diff --git a/modules/menu/menu.module b/modules/menu/menu.module
index 40614a1..36cfafd 100644
--- a/modules/menu/menu.module
+++ b/modules/menu/menu.module
@@ -349,6 +349,8 @@ function menu_delete($menu) {
  *
  * @todo This has to be turned into a #process form element callback. The
  *   'menu_override_parent_selector' variable is entirely superfluous.
+ *
+ * @since Argument $type added in 7.9.
  */
 function menu_parent_options($menus, $item, $type = '') {
   // The menu_links table can be practically any size and we need a way to
diff --git a/modules/node/node.module b/modules/node/node.module
index 5d51803..4af5ab4 100644
--- a/modules/node/node.module
+++ b/modules/node/node.module
@@ -3179,6 +3179,8 @@ function node_query_entity_field_access_alter(QueryAlterableInterface $query) {
  *   Either 'node' or 'entity' depending on what sort of query it is. See
  *   node_query_node_access_alter() and node_query_entity_field_access_alter()
  *   for more.
+ *
+ * @since Argument $base_table removed in 7.3.
  */
 function _node_query_node_access_alter($query, $type) {
   global $user;
diff --git a/modules/openid/openid.inc b/modules/openid/openid.inc
index 9b793d3..3d0b49b 100644
--- a/modules/openid/openid.inc
+++ b/modules/openid/openid.inc
@@ -628,6 +628,8 @@ function _openid_get_params($str) {
  *   prefix.
  *
  * @see http://openid.net/specs/openid-authentication-2_0.html#extensions
+ *
+ * @since Argument $only_signed added in 7.11.
  */
 function openid_extract_namespace($response, $extension_namespace, $fallback_prefix = NULL, $only_signed = FALSE) {
   $signed_keys = explode(',', $response['openid.signed']);
@@ -700,6 +702,8 @@ function openid_extract_ax_values($values, $uris) {
 
 /**
  * Determine the available math library GMP vs. BCMath, favouring GMP for performance.
+ *
+ * @since Function added in 7.2.
  */
 function _openid_get_math_library() {
   // Not drupal_static(), because a function is not going to disappear and
@@ -720,6 +724,8 @@ function _openid_get_math_library() {
 
 /**
  * Calls the add function from the available math library for OpenID.
+ *
+ * @since Function added in 7.2.
  */
 function _openid_math_add($x, $y) {
   $library = _openid_get_math_library();
@@ -733,6 +739,8 @@ function _openid_math_add($x, $y) {
 
 /**
  * Calls the mul function from the available math library for OpenID.
+ *
+ * @since Function added in 7.2.
  */
 function _openid_math_mul($x, $y) {
   $library = _openid_get_math_library();
@@ -746,6 +754,8 @@ function _openid_math_mul($x, $y) {
 
 /**
  * Calls the div function from the available math library for OpenID.
+ *
+ * @since Function added in 7.2.
  */
 function _openid_math_div($x, $y) {
   $library = _openid_get_math_library();
@@ -759,6 +769,8 @@ function _openid_math_div($x, $y) {
 
 /**
  * Calls the cmp function from the available math library for OpenID.
+ *
+ * @since Function added in 7.2.
  */
 function _openid_math_cmp($x, $y) {
   $library = _openid_get_math_library();
@@ -772,6 +784,8 @@ function _openid_math_cmp($x, $y) {
 
 /**
  * Calls the mod function from the available math library for OpenID.
+ *
+ * @since Function added in 7.2.
  */
 function _openid_math_mod($x, $y) {
   $library = _openid_get_math_library();
@@ -785,6 +799,8 @@ function _openid_math_mod($x, $y) {
 
 /**
  * Calls the pow function from the available math library for OpenID.
+ *
+ * @since Function added in 7.2.
  */
 function _openid_math_pow($x, $y) {
   $library = _openid_get_math_library();
@@ -798,6 +814,8 @@ function _openid_math_pow($x, $y) {
 
 /**
  * Calls the mul function from the available math library for OpenID.
+ *
+ * @since Function added in 7.2.
  */
 function _openid_math_powmod($x, $y, $z) {
   $library = _openid_get_math_library();
@@ -823,6 +841,8 @@ function _openid_math_powmod($x, $y, $z) {
  *
  * @return
  *   A fully-loaded user object if the user is found or FALSE if not found.
+ *
+ * @since Function added in 7.9.
  */
 function _openid_invalid_openid_transition($identity, $response) {
   $account = FALSE;
diff --git a/modules/overlay/overlay-parent.js b/modules/overlay/overlay-parent.js
index ace7def..2db5764 100644
--- a/modules/overlay/overlay-parent.js
+++ b/modules/overlay/overlay-parent.js
@@ -378,6 +378,8 @@ Drupal.overlay.isAdminLink = function (url) {
  *
  * @return boolean
  *   TRUE if the URL is external to the site, FALSE otherwise.
+ *
+ * @since Function added in 7.8.
  */
 Drupal.overlay.isExternalLink = function (url) {
   var re = RegExp('^((f|ht)tps?:)?//(?!' + window.location.host + ')');
diff --git a/modules/search/search.extender.inc b/modules/search/search.extender.inc
index ad4b86e..dfe36ff 100644
--- a/modules/search/search.extender.inc
+++ b/modules/search/search.extender.inc
@@ -129,6 +129,8 @@ class SearchQuery extends SelectQueryExtender {
    * avoid Denial-of-Service attacks. Expressions beyond the limit are ignored.
    *
    * @var boolean
+   *
+   * @since Property added in 7.12.
    */
   protected $expressionsIgnored = FALSE;
 
diff --git a/modules/simpletest/drupal_web_test_case.php b/modules/simpletest/drupal_web_test_case.php
index 42bab12..45e4ee9 100644
--- a/modules/simpletest/drupal_web_test_case.php
+++ b/modules/simpletest/drupal_web_test_case.php
@@ -82,6 +82,8 @@ abstract class DrupalTestCase {
    * environment. We must ensure that setUp() has been run. Otherwise,
    * tearDown() will act on the parent Drupal site rather than the test
    * environment, destroying live data.
+   *
+   * @since Property added in 7.12.
    */
   protected $setup = FALSE;
 
diff --git a/modules/simpletest/simpletest.module b/modules/simpletest/simpletest.module
index 980bc14..7c79285 100644
--- a/modules/simpletest/simpletest.module
+++ b/modules/simpletest/simpletest.module
@@ -511,6 +511,8 @@ function simpletest_clean_results_table($test_id = NULL) {
  * Aborts sending of messages with ID 'simpletest_cancel_test'.
  *
  * @see MailTestCase::testCancelMessage()
+ *
+ * @since Function added in 7.12.
  */
 function simpletest_mail_alter(&$message) {
   if ($message['id'] == 'simpletest_cancel_test') {
diff --git a/modules/simpletest/simpletest.pages.inc b/modules/simpletest/simpletest.pages.inc
index d1a7e4a..9ce1b17 100644
--- a/modules/simpletest/simpletest.pages.inc
+++ b/modules/simpletest/simpletest.pages.inc
@@ -493,6 +493,8 @@ function simpletest_settings_form($form, &$form_state) {
 
 /**
  * Validation handler for simpletest_settings_form().
+ *
+ * @since Function added in 7.9.
  */
 function simpletest_settings_form_validate($form, &$form_state) {
   // If a username was provided but a password wasn't, preserve the existing
diff --git a/modules/system/system.api.php b/modules/system/system.api.php
index 620a536..584c9da 100644
--- a/modules/system/system.api.php
+++ b/modules/system/system.api.php
@@ -504,6 +504,8 @@ function hook_admin_paths_alter(&$paths) {
  *   The type of entities being loaded (i.e. node, user, comment).
  * @param $langcode
  *   The language to display the entity in.
+ *
+ * @since Argument $langcode added in 7.2.
  */
 function hook_entity_prepare_view($entities, $type, $langcode) {
   // Load a specific node into the user object for later theming.
@@ -1973,6 +1975,8 @@ function hook_module_implements_alter(&$implementations, $hook) {
  * @return
  *   An associative array. Each key is the system name of a theme and each value
  *   is the corresponding path to the theme's .info file.
+ *
+ * @since Function added in 7.12.
  */
 function hook_system_theme_info() {
   $themes['mymodule_test_theme'] = drupal_get_path('module', 'mymodule') . '/mymodule_test_theme/mymodule_test_theme.info';
diff --git a/modules/system/system.module b/modules/system/system.module
index 086a298..d13f68a 100644
--- a/modules/system/system.module
+++ b/modules/system/system.module
@@ -1798,6 +1798,8 @@ function system_authorized_get_url(array $options = array()) {
 
 /**
  * Returns the URL for the authorize.php script when it is processing a batch.
+ *
+ * @since Function added in 7.8.
  */
 function system_authorized_batch_processing_url() {
   return system_authorized_get_url(array('query' => array('batch' => '1')));
diff --git a/modules/taxonomy/taxonomy.admin.inc b/modules/taxonomy/taxonomy.admin.inc
index a236cfe..0b6b2a6 100644
--- a/modules/taxonomy/taxonomy.admin.inc
+++ b/modules/taxonomy/taxonomy.admin.inc
@@ -189,6 +189,8 @@ function taxonomy_form_vocabulary($form, &$form_state, $edit = array()) {
  *
  * @see taxonomy_form_vocabulary()
  * @see taxonomy_form_vocabulary_submit()
+ *
+ * @since Function added in 7.2.
  */
 function taxonomy_form_vocabulary_validate($form, &$form_state) {
   // During the deletion there is no 'machine_name' key
diff --git a/modules/taxonomy/taxonomy.module b/modules/taxonomy/taxonomy.module
index c920344..f832ff8 100644
--- a/modules/taxonomy/taxonomy.module
+++ b/modules/taxonomy/taxonomy.module
@@ -851,6 +851,8 @@ function taxonomy_terms_static_reset() {
  *
  * @param $ids
  * An array of ids to reset in entity controller cache.
+ *
+ * @since Function added in 7.9.
  */
 function taxonomy_vocabulary_static_reset($ids = NULL) {
   drupal_static_reset('taxonomy_vocabulary_get_names');
@@ -1785,6 +1787,8 @@ function taxonomy_field_presave($entity_type, $entity, $field, $instance, $langc
 
 /**
  * Implements hook_node_insert().
+ *
+ * @since Function added in 7.12.
  */
 function taxonomy_node_insert($node) {
   // Add taxonomy index entries for the node.
@@ -1799,6 +1803,8 @@ function taxonomy_node_insert($node) {
  *
  * @param $node
  *   The node object.
+ *
+ * @since Function added in 7.12.
  */
 function taxonomy_build_node_index($node) {
   // We maintain a denormalized table of term/node relationships, containing
@@ -1862,6 +1868,8 @@ function taxonomy_build_node_index($node) {
 
 /**
  * Implements hook_node_update().
+ *
+ * @since Function added in 7.12.
  */
 function taxonomy_node_update($node) {
   // Always rebuild the node's taxonomy index entries on node save.
@@ -1882,6 +1890,8 @@ function taxonomy_node_delete($node) {
  *
  * @param $node
  *   The node object.
+ *
+ * @since Function added in 7.12.
  */
 function taxonomy_delete_node_index($node) {
   if (variable_get('taxonomy_maintain_index_table', TRUE)) {
diff --git a/modules/update/update.module b/modules/update/update.module
index 293a53d..11f4286 100644
--- a/modules/update/update.module
+++ b/modules/update/update.module
@@ -862,6 +862,8 @@ function update_flush_caches() {
  *
  * @return
  *   An eight character string uniquely identifying this Drupal installation.
+ *
+ * @since Function added in 7.2
  */
 function _update_manager_unique_identifier() {
   $id = &drupal_static(__FUNCTION__, '');
@@ -880,6 +882,9 @@ function _update_manager_unique_identifier() {
  * @return
  *   The full path to the temporary directory where update file archives
  *   should be extracted.
+ *
+ * @since Function moved from update.manager.inc in 7.2.
+ * @since Argument $create added in 7.2.
  */
 function _update_manager_extract_directory($create = TRUE) {
   $directory = &drupal_static(__FUNCTION__, '');
@@ -901,6 +906,8 @@ function _update_manager_extract_directory($create = TRUE) {
  * @return
  *   The full path to the temporary directory where update file archives
  *   should be cached.
+ *
+ * @since Function added in 7.2.
  */
 function _update_manager_cache_directory($create = TRUE) {
   $directory = &drupal_static(__FUNCTION__, '');
diff --git a/modules/user/user.api.php b/modules/user/user.api.php
index 069a9f8..3ea3880 100644
--- a/modules/user/user.api.php
+++ b/modules/user/user.api.php
@@ -377,6 +377,8 @@ function hook_user_view_alter(&$build) {
  *
  * @see hook_user_role_insert()
  * @see hook_user_role_update()
+ *
+ * @since Function added in 7.2.
  */
 function hook_user_role_presave($role) {
   // Set a UUID for the user role if it doesn't already exist
diff --git a/update.php b/update.php
index 0c2aaf8..00a22e2 100644
--- a/update.php
+++ b/update.php
@@ -328,6 +328,8 @@ function update_extra_requirements($requirements = NULL) {
  *   (optional) If set to TRUE, requirement warnings will be ignored, and a
  *   report will only be issued if there are requirement errors. Defaults to
  *   FALSE.
+ *
+ * @since Argument $skip_warnings added in 7.10.
  */
 function update_check_requirements($skip_warnings = FALSE) {
   // Check requirements of all loaded modules.
