diff --git a/authcache.formtokenids.js b/authcache.formtokenids.js
index 0fe22a5..8dab6c2 100644
--- a/authcache.formtokenids.js
+++ b/authcache.formtokenids.js
@@ -20,4 +20,26 @@
       });
     }
   };
+
+  Drupal.behaviors.authcacheFormBuildId = {
+    attach: function (context, settings) {
+      if ($.isEmptyObject(settings.authcacheFormTokenIds)) {
+        return;
+      }
+
+      // Retrieve new build id using an AJAX command.
+      $.AuthcacheAjax.cmd('form_build_id', settings.authcacheFormBuildIds, function(evt, result) {
+        if ($.isEmptyObject(result)) {
+          return;
+        }
+
+        // Inject the hidden form_build_id input after each hidden form_id input.
+        $("form input[name='form_id']", context).once('authcacheFormBuildIds').after(function() {
+          if (settings.authcacheFormBuildIds[this.value] && result[this.value]) {
+            return "<input type='hidden' name='form_build_id' value='" + result[this.value] + "'/>"
+          }
+        });
+      });
+    }
+  };
 }(jQuery));
diff --git a/authcache.info b/authcache.info
index 2ea5296..7695546 100644
--- a/authcache.info
+++ b/authcache.info
@@ -4,4 +4,5 @@ package = Performance and scalability
 core = 7.x
 configure = admin/config/system/authcache
 files[] = includes/AuthcacheFormTokenIdCommand.inc
+files[] = includes/AuthcacheFormBuildIdCommand.inc
 files[] = includes/AuthcacheMenuLocalTasksCommand.inc
diff --git a/authcache.module b/authcache.module
index 6726c0c..f2b1893 100644
--- a/authcache.module
+++ b/authcache.module
@@ -206,6 +206,8 @@ function authcache_form_alter(&$form, &$form_state, $form_id) {
  * @see drupal_build_form().
  */
 function _authcache_form_after_build($form, $form_state) {
+  global $user;
+
   $form_id = $form['#form_id'];
 
   if (isset($form['form_token']) && !authcache_get_request_property('ajax')) {
@@ -218,6 +220,23 @@ function _authcache_form_after_build($form, $form_state) {
       unset($form['form_build_id']);
       unset($form['#build_id']);
     }
+    elseif ($user->uid) {
+      // Remove the build-id hidden field
+      unset($form['form_build_id']);
+
+      // Otherwise store prototype-form builds in the cache for authenticated
+      // users.
+      drupal_add_js(drupal_get_path('module', 'authcache') . '/authcache.formtokenids.js');
+      drupal_add_js(array('authcacheFormBuildIds' => array(
+        $form_id => $form['#build_id'],
+      )), 'setting');
+      authcache_ajax_add_command('form_build_id');
+
+      // Prepend 'authcache-' to the build-id. Those builds will serve as
+      // prototypes when generating new forms for other users from within
+      // AuthcacheFormBuildIdCommand.
+      $form['#build_id'] = 'authcache-' . $form['#build_id'];
+    }
 
     if (isset($form['form_token']) && authcache_get_request_property('ajax')) {
       // Remove CSRF-token from built form and make sure it can be retrieved
@@ -1249,6 +1268,13 @@ function authcache_authcache_ajax_command() {
         'maxage' => ini_get('session.cookie_lifetime') ?: 0,
       ),
     ),
+    'form_build_id' => array(
+      'handler' => 'AuthcacheFormBuildIdCommand',
+      'request' => 'formbuild',
+      'request config' => array(
+        'maxage' => 21600,
+      ),
+    ),
     'menu_local_tasks' => array(
       'handler' => 'AuthcacheMenuLocalTasksCommand',
       'handler config' => array(
