diff --git a/cookbook/form/form_collections.rst b/cookbook/form/form_collections.rst
index 866a1d1b024..8511844e855 100644
--- a/cookbook/form/form_collections.rst
+++ b/cookbook/form/form_collections.rst
@@ -729,5 +729,75 @@ the relationship between the removed ``Tag`` and ``Task`` object.
updated (whether you're adding new tags or removing existing tags) on
each Tag object itself.
+.. _cookbook-form-collections-custom-prototype:
+
+Rendering a Custom Prototype
+----------------------------
+
+Most of the time the provided prototype will be sufficient for your needs
+and does not need to be changed. But if you are in the situation were you
+need to have a complete custom prototype, you can render it yourself.
+
+The Form component automatically looks for a block whose name follows a certain
+schema to decide how to render each entry of the form type collection. For
+example, if your form field is named ``tasks``, you will be able to change
+the widget for each task as follows:
+
+.. configuration-block::
+
+ .. code-block:: html+jinja
+
+ {% form_theme form _self %}
+
+ {% block _tasks_entry_widget %}
+
+ {{ form_widget(task.task) }} |
+ {{ form_widget(task.dueDate) }} |
+
+ {% endblock %}
+
+ .. code-block:: html+php
+
+
+
+ widget($form->task) ?> |
+ widget($form->dueDate) ?> |
+
+
+Not only can you override the rendered widget, but you can also change the
+complete form row or the label as well. For the ``tasks`` field given above,
+the block names would be the following:
+
+================ =======================
+Part of the Form Block Name
+================ =======================
+``label`` ``_tasks_entry_label``
+``widget`` ``_tasks_entry_widget``
+``row`` ``_tasks_entry_row``
+================ =======================
+
+Then, you only have to ensure to render the collection type's ``data-prototype``
+property with the proper prototype so that new entries will be rendered the
+same way as existing ones:
+
+.. configuration-block::
+
+ .. code-block:: html+jinja
+
+ {% form_theme form _self %}
+
+ {% block _tasks_widget %}
+ {% set attr = attr|merge({ 'data-prototype': form_row(prototype) }) %}
+
+ {% for child in form %}
+ {{ form_row(child) }}
+ {% endfor %}
+
+ {% endblock %}
+
+ .. code-block:: html+php
+
+
+
.. _`Owning Side and Inverse Side`: http://docs.doctrine-project.org/en/latest/reference/unitofwork-associations.html
.. _`JSFiddle`: http://jsfiddle.net/847Kf/4/