diff --git a/doc/source/template_guide/hot_guide.rst b/doc/source/template_guide/hot_guide.rst
new file mode 100644
index 000000000..ece38d668
--- /dev/null
+++ b/doc/source/template_guide/hot_guide.rst
@@ -0,0 +1,221 @@
+..
+ Licensed under the Apache License, Version 2.0 (the "License"); you may
+ not use this file except in compliance with the License. You may obtain
+ a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+ WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+ License for the specific language governing permissions and limitations
+ under the License.
+
+=======================================
+Heat Orchestration Template (HOT) Guide
+=======================================
+
+HOT is a new template format meant to replace the Heat CloudFormation-compatible
+format (CFN) as the native format supported by the Heat over time.
+This guide is targeted towards template authors and explains how to write
+HOT templates based on examples. A detailed specification of HOT can be found
+at :ref:`_hot_spec`.
+
+------
+Status
+------
+
+HOT support is still under development and needs more work to provide access to
+all functionality currently available via the CFN compatible template interface.
+This guide will be updated periodically whenever new features get implemented
+for HOT.
+
+----------------------------------
+Writing a hello world HOT template
+----------------------------------
+
+This section gives an introduction on how to write HOT templates, starting from
+very basic steps and then going into more and more detail by means of examples.
+
+A most basic template
+---------------------
+The most basic template you can think of may contain only a single resource
+definition using only predefined properties (along with the mandatory Heat
+template version tag). For example, the template below could be used to simply
+deploy a single compute instance.
+
+::
+
+ heat_template_version: 2013-05-23
+
+ description: Simple template to deploy a single compute instance
+
+ resources:
+ my_instance:
+ type: OS::Nova::Compute
+ properties:
+ KeyName: my_key
+ ImageId: F18-x86_64-cfntools
+ InstanceType: m1.small
+
+Each HOT template has to include the *heat_template_version* key with value
+'2013-05-23' (the current version of HOT). While the *description* is optional,
+it is good practice to include some useful text that describes what users can do
+with the template. In case you want to provide a longer description that does
+not fit on a single line, you can provide multi-line text in YAML, for example:
+
+::
+
+ description: >
+ This is how you can provide a longer description
+ of your template that goes over several lines.
+
+The *resources* section is required and must contain at least one resource
+definition. In the example above, a compute instance is defined with fixed
+values for the 'KeyName', 'ImageId' and 'InstanceType' parameters.
+
+Note that all those elements, i.e. a key-pair with the given name, the image and
+the flavor have to exist in the OpenStack environment where the template is
+used. Typically a template is made more easily reusable, though, by defining a
+set of *input parameters* instead of hard-coding such values.
+
+
+Template input parameters
+-------------------------
+Input parameters defined in the *parameters* section of a HOT template (see also
+:ref:`_hot_spec_parameters`) allow users to customize a template during
+deployment. For example, this allows for providing custom key-pair names or
+image IDs to be used for a deployment.
+From a template author's perspective, this helps to make a template more easily
+reusable by avoiding hardcoded assumptions.
+
+Sticking to the example used above, it makes sense to allow users to provide
+their custom key-pairs, provide their own image, and to select a flavor for the
+compute instance. This can be achieved by extending the initial template as
+follows:
+
+::
+
+ heat_template_version: 2013-05-23
+
+ description: Simple template to deploy a single compute instance
+
+ parameters:
+ key_name:
+ type: string
+ description: Name of key-pair to be used for compute instance
+ image_id:
+ type: string
+ description: Image to be used for compute instance
+ instance_type:
+ type: string
+ description: Type of instance (flavor) to be used
+
+ resources:
+ my_instance:
+ type: OS::Nova::Compute
+ properties:
+ KeyName: { get_param: key_name }
+ ImageId: { get_param: image_id }
+ InstanceType: { get_param: instance_type }
+
+In the example above, three input parameters have been defined that have to be
+provided by the user upon deployment. The fixed values for the respective
+resource properties have been replaced by references to the corresponding
+input parameters by means of the *get_param* function (see also
+:ref:`_hot_spec_intrinsic_functions`).
+
+You can also define default values for input parameters which will be used in
+case the user does not provide the respective parameter during deployment. For
+example, the following definition for the *instance_type* parameter would select
+the 'm1.small' flavor unless specified otherwise be the user.
+
+::
+
+ parameters:
+ instance_type:
+ type: string
+ description: Type of instance (flavor) to be used
+ default: m1.small
+
+Another option that can be specified for a parameter is to hide its value when
+users request information about a stack deployed from a template. This is
+achieved by the *hidden* attribute and useful, for example when requesting
+passwords as user input:
+
+::
+
+ parameters:
+ database_password:
+ type: string
+ description: Password to be used for database
+ hidden: true
+
+
+Restricting user input
+~~~~~~~~~~~~~~~~~~~~~~
+In some cases you might want to restrict the values of input parameters that
+users can supply. For example, you might know that the software running in a
+compute instance needs a certain amount of resources so you might want to
+restrict the *instance_type* parameter introduced above. Parameters in HOT
+templates can be restricted by adding a *constraints* section (see also
+:ref:`_hot_spec_parameters_constraints`).
+For example, the following would allow only three values to be provided as input
+for the *instance_type* parameter:
+
+::
+
+ parameters:
+ instance_type:
+ type: string
+ description: Type of instance (flavor) to be used
+ constraints:
+ - allow_values: [ m1.medium, m1.large, m1.xlarge ]
+ description: Value must be one of m1.medium, m1.large or m1.xlarge.
+
+The *constraints* section allows for defining a list of constraints that must
+all be fulfilled by user input. For example, the following list of constraints
+could be used to clearly specify format requirements on a password to be
+provided by users:
+
+::
+
+ parameters:
+ database_password:
+ type: string
+ description: Password to be used for database
+ hidden: true
+ constraints:
+ - length: { min: 6, max: 8 }
+ description: Password length must be between 6 and 8 characters.
+ - allowed_pattern: "[a-zA-Z0-9]+"
+ description: Password must consist of characters and numbers only.
+ - allowed_pattern: "[A-Z]+[a-zA-Z0-9]*"
+ description: Password must start with an uppercase character.
+
+Note that you can define multiple constraints of the same type. Especially in
+the case of allowed patterns this not only allows for keeping regular
+expressions simple and maintainable, but also for keeping error messages to be
+presented to users precise.
+
+
+Providing template outputs
+--------------------------
+In addition to template customization through input parameters, you will
+typically want to provide outputs to users, which can be done in the
+*outputs* section of a template (see also :ref:`_hot_spec_outputs`).
+For example, the IP address by which the instance defined in the example
+above can be accessed should be provided to users. Otherwise, users would have
+to look it up themselves. The definition for providing the IP address of the
+compute instance as an output is shown in the following snippet:
+
+::
+
+ outputs:
+ instance_ip:
+ description: The IP address of the deployed instance
+ value: { get_attr: [my_instance, PublicIp] }
+
+Output values are typically resolved using intrinsic function such as
+the *get_attr* function in the example above (see also
+:ref:`_hot_spec_intrinsic_functions`).
diff --git a/doc/source/template_guide/hot_spec.rst b/doc/source/template_guide/hot_spec.rst
new file mode 100644
index 000000000..31219c36e
--- /dev/null
+++ b/doc/source/template_guide/hot_spec.rst
@@ -0,0 +1,444 @@
+..
+ Licensed under the Apache License, Version 2.0 (the "License"); you may
+ not use this file except in compliance with the License. You may obtain
+ a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+ WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+ License for the specific language governing permissions and limitations
+ under the License.
+
+.. _hot_spec:
+
+===============================================
+Heat Orchestration Template (HOT) Specification
+===============================================
+
+HOT is a new template format meant to replace the Heat CloudFormation-compatible
+format (CFN) as the native format supported by the Heat over time.
+This specification explains in detail all elements of the HOT template format.
+An example driven guide to writing HOT templates can be found
+at :ref:`_hot_guide`.
+
+------
+Status
+------
+
+HOT support is still under development and needs more work to provide access to
+all functionality currently available via the CFN compatible template interface.
+This specification will be updated periodically whenever new features get
+implemented for HOT.
+
+------------------
+Template Structure
+------------------
+
+HOT templates are defined in YAML and follow the structure outlined below.
+
+::
+
+ heat_template_version: 2013-05-23
+
+ description: # a description of the template
+
+ parameters:
+ # declaration of input parameters
+
+ resources:
+ # declaration of template resources
+
+ outputs:
+ # declaration of output parameters
+
+heat_template_version
+ This key with value *2013-05-23* (or a later date) indicates that the YAML
+ document is a HOT template of the specified version.
+
+description
+ This *optional* key allows for giving a description of the template, or the
+ workload that can be deployed using the template.
+
+parameters
+ This section allows for specifying input parameters that have to be provided
+ when instantiating the template. The section is *optional* and can be
+ omitted when no input is required.
+
+resources
+ This section contains the declaration of the single resources of the
+ template. This section is mandatory and at least one resource must be
+ defined in any HOT template.
+
+outputs
+ This section allows for specifying output parameters available to users once
+ the template has been instantiated. This section is *optional* and can be
+ omitted when no output values are required.
+
+
+.. _hot_spec_parameters:
+
+------------------
+Parameters Section
+------------------
+
+The *parameters* section allows for specifying input parameters that have to be
+provided when instantiating the template. Such parameters are typically used to
+customize each deployment (e.g. by setting custom user names or passwords) or
+for binding to environment-specifics like certain images.
+
+Each parameter is specified in a separated nested block with the name of the
+parameters defined in the first line and additional attributes such as type or
+default value defined as nested elements.
+
+::
+
+ parameters:
+ :
+ type:
+ description:
+ default:
+ hidden:
+ constraints:
+
+
+param name
+ The name of the parameter is defined at the top of each parameter block.
+
+type
+ This attribute specifies the type of parameter. Currently supported types
+ are *string*, *number*, *comma_delimited_list* or *json*.
+
+description
+ This *optional* attribute allows for giving a human readable description of
+ the parameter.
+
+default
+ This *optional* attribute allows for defining a default value for the
+ parameters which will be used in case the parameter is not specified by the
+ user during deployment.
+
+hidden
+ This *optional* attribute allows for specifying whether the parameters
+ should be hidden when showing information about a stack created from the
+ template at runtime (e.g. for hiding passwords that were specified as
+ parameters). If not specified, the default value 'false' will be used.
+
+constraints
+ This *optional* block allows for specifying additional constraints on the
+ parameter, such as minimum or maximum values for numeric parameters.
+
+The following example shows a minimalistic definition of two parameters. Note
+that the description is actually optional, but is good practice to provide a
+useful description for each parameter.
+
+::
+
+ parameters:
+ user_name:
+ type: string
+ description: User name to be configured for the application
+ port_number:
+ type: number
+ description: Port number to be configured for the web server
+
+
+.. _hot_spec_parameters_constraints:
+
+Parameter Constraints
+---------------------
+
+The *constraints* block of a parameter definition allows for defining additional
+validation constraints that apply to the value of the parameter. At
+instantiation time of the template, user provided parameter values are validated
+against those constraints to make sure the provided values match expectations of
+the template author.
+Constraints are defined in the form of a bulleted list according to the
+following syntax:
+
+::
+
+ constraints:
+ - :
+ description:
+
+constraint type
+ The constraint type specifies the kind of constraint defined in the current
+ bulleted list item. The set of currently supported constraints is given
+ below.
+
+constraint definition
+ This value defines the actual constraint, depending on the constraint type.
+ The concrete syntax for each constraint type is given below.
+
+description
+ This *optional* attribute allows for specifying a concrete description of
+ the current constraint. This text will be presented to the user, for
+ example, when the provided input value for a parameter violates the
+ constraint. If omitted, a default validation message will be presented to
+ the user.
+
+The following example show the definition of a string parameter with two
+constraints. Note that while the descriptions for each constraint are optional,
+it is good practice to provide concrete descriptions so useful messages can be
+presented to the user at deployment time.
+
+::
+
+ parameters:
+ user_name:
+ type: string
+ description: User name to be configured for the application
+ constraints:
+ - length: { min: 6, max: 8 }
+ description: User name must be between 6 and 8 characters
+ - allowed_pattern: "[A-Z]+[a-zA-Z0-9]*"
+ description: User name must start with an uppercase character
+
+The following sections list the supported types of parameter constraints, along
+with the concrete syntax for each type.
+
+length
+~~~~~~
+The *length* constraint applies to parameters of type *string* and allows for
+defining a lower and upper limit for the length of the string value. The syntax
+for the length constraint is:
+
+::
+
+ length: { min: , max: }
+
+It is possible to define a length constraint with only a lower limit or an
+upper limit. However, at least one of *min* or *max* must be specified.
+
+range
+~~~~~
+The *range* constraint applies to parameters of type *number* and allows for
+defining a lower and upper limit for the numeric value of the parameter. The
+syntax of the range constraint is:
+
+::
+
+ range: { min: , max: }
+
+It is possible to define a range constraint with only a lower limit or an
+upper limit. However, at least one of *min* or *max* must be specified.
+The minimum or maximum boundaries are included in the range. For example, the
+following range constraint would allow for all numeric values between 0 and 10.
+
+::
+
+ range: { min: 0, max: 10 }
+
+
+allowed_values
+~~~~~~~~~~~~~~
+The *allowed_values* constraint applies to parameters of type string or number
+and allows for specifying a set of possible values for a parameter. At
+deployment time, the user provided value for the respective parameter must
+match one of the elements of the specified list. The syntax of the
+allowed_values constraint is:
+
+::
+
+ allowed_values: [ , , ... ]
+
+Alternatively, the YAML bulleted list notation can be used:
+
+::
+
+ allowed_values:
+ -
+ -
+ - ...
+
+For example:
+
+::
+
+ parameters:
+ instance_type:
+ type: string
+ description: Instance type for compute instances
+ constraints:
+ allowed_values:
+ - m1.small
+ - m1.medium
+ - m1.large
+
+allowed_pattern
+~~~~~~~~~~~~~~~
+The *allowed_pattern* constraint applies to parameters of type string and allows
+for specifying a regular expression against which a user provided parameter
+value must evaluate at deployment
+The syntax of the allowed_pattern constraint is:
+
+::
+
+ allowed_pattern:
+
+For example:
+
+::
+
+ parameters:
+ user_name:
+ type: string
+ description: User name to be configured for the application
+ constraints:
+ - allowed_pattern: "[A-Z]+[a-zA-Z0-9]*"
+ description: User name must start with an uppercase character
+
+
+.. _hot_spec_resources:
+
+-----------------
+Resources Section
+-----------------
+
+In the *resources* section, the templates for actual resources that will make up
+a stack deployed from the HOT template (e.g. compute instances, networks,
+storage volumes) are defined.
+Each resource is defined as a separate block in the resources section according
+to the syntax below.
+
+::
+
+ resources:
+ :
+ type:
+ properties:
+ :
+ # more resource specific metadata
+
+resource ID
+ A resource block is headed by the resource ID, which must be unique within
+ the resource section of a template.
+type
+ This attribute specifies the type of resource, such as OS::Nova::Compute.
+properties
+ This section contains a list of resource specific properties. The property
+ value can be provided in place, or can be provided via a function
+ (see :ref:`_hot_spec_intrinsic_functions`).
+
+Depending on the type of resource, the resource block might include more
+resource specific metadata. Basically all resource types that can be used in
+CFN templates can also be used in HOT templates, adapted to the YAML structure
+as outlined above.
+Below is an example of a simple compute resource definition with some fixed
+property values.
+
+::
+
+ resources:
+ my_instance:
+ type: OS::Nova::Compute
+ properties:
+ instance_type: m1.small
+ image_id: F18-x86_64-cfntools
+
+
+.. _hot_spec_outputs:
+
+---------------
+Outputs Section
+---------------
+
+In the *outputs* section, any output parameters that should be available to the
+user can be defined. Typically, this would be, for example, parameters such as
+IP addresses of deployed instances, or URLs of web applications deployed as part
+of a stack.
+
+Output parameters are defined according to the following syntax:
+
+::
+
+ outputs:
+ :
+
+parameter name
+ The name of the output parameter is defined as a key in the outputs section.
+parameter value
+ This element specifies the value of the output parameter. Typically, this
+ will be resolved by means of a function, e.g. by getting an attribute value
+ of one of the stack's resources (see also
+ :ref:`_hot_spec_intrinsic_functions`).
+
+The example below shows, how the public IP address of a compute resource can be
+defined as an output parameter.
+
+::
+
+ outputs:
+ instance_ip: { get_attr: [my_instance, PublicIp] }
+
+
+.. _hot_spec_intrinsic_functions:
+
+-------------------
+Intrinsic Functions
+-------------------
+HOT provides a set of intrinsic functions that can be used inside HOT templates
+to perform specific tasks, such as getting the value of a resource attribute at
+runtime. A definition of all intrinsic functions available in HOT is given
+below.
+
+get_param
+---------
+The *get_param* function allows for referencing an input parameter of a template
+from anywhere within a template. At runtime, it will be resolved to the value
+provided for this input parameter. The syntax of the get_param function is as
+follows:
+
+::
+
+ get_param:
+
+The *parameter name* of the input parameter to be resolved is given as single
+parameter to this function. A sample use of this function in context of a
+resource definition is shown below.
+
+::
+
+ parameters:
+ instance_type:
+ type: string
+ description: Instance type to be used.
+
+ resources:
+ my_instance:
+ type: OS::Nova::Compute
+ properties:
+ instance_type: { get_param: instance_type}
+
+
+get_attr
+--------
+The *get_attr* function allows for referencing an attribute of a resource. At
+runtime, it will be resolved to the value of an attribute of a resource instance
+created from the respective resource definition of the template.
+The syntax of the get_attr function is as follows:
+
+::
+
+ get_attr: [ : ]
+
+resource ID
+ This parameter specifies the resource the attribute of which shall be
+ resolved. This resource must be defined within the *resources* section of
+ the template (see also :ref:`_hot_spec_resources`).
+attribute name
+ This parameter specifies the attribute to be resolved.
+
+An example of using the get_attr function is shown below:
+
+::
+
+ resources:
+ my_instance:
+ type: OS::Nova::Compute
+ # ...
+
+ outputs:
+ instance_ip: { get_attr: [my_instance, PublicIp] }
diff --git a/doc/source/template_guide/index.rst b/doc/source/template_guide/index.rst
index baf1b53e0..defd197c6 100644
--- a/doc/source/template_guide/index.rst
+++ b/doc/source/template_guide/index.rst
@@ -20,4 +20,6 @@ Template Guide
functions
openstack
cfn
- rackspace
\ No newline at end of file
+ rackspace
+ hot_guide
+ hot_spec