diff --git a/sdk/jme3-templates/src/com/jme3/gde/templates/files/Control.html b/sdk/jme3-templates/src/com/jme3/gde/templates/files/Control.html
new file mode 100644
index 000000000..039061577
--- /dev/null
+++ b/sdk/jme3-templates/src/com/jme3/gde/templates/files/Control.html
@@ -0,0 +1,14 @@
+
+
+
+
+
+
+
+
+ A generic Control class that extends AbstractControl and can be used to control a spatial.
+
+
diff --git a/sdk/jme3-templates/src/com/jme3/gde/templates/files/Control.template b/sdk/jme3-templates/src/com/jme3/gde/templates/files/Control.template
new file mode 100644
index 000000000..7a48a7df9
--- /dev/null
+++ b/sdk/jme3-templates/src/com/jme3/gde/templates/files/Control.template
@@ -0,0 +1,66 @@
+<#assign licenseFirst = "/*">
+<#assign licensePrefix = " * ">
+<#assign licenseLast = " */">
+<#include "../Licenses/license-${project.license}.txt">
+
+<#if package?? && package != "">
+package ${package};
+
+import com.jme3.export.InputCapsule;
+import com.jme3.export.JmeExporter;
+import com.jme3.export.JmeImporter;
+import com.jme3.export.OutputCapsule;
+import com.jme3.renderer.RenderManager;
+import com.jme3.renderer.ViewPort;
+import com.jme3.scene.Spatial;
+import com.jme3.scene.control.AbstractControl;
+import com.jme3.scene.control.Control;
+import java.io.IOException;
+
+#if>
+/**
+ *
+ * @author ${user}
+ */
+public class ${name} extends AbstractControl{
+ //Any local variables should be encapsulated by getters/setters so they
+ //appear in the SDK properties window and can be edited.
+ //Right-click a local variable to encapsulate it with getters and setters.
+
+ @Override
+ protected void controlUpdate(float tpf) {
+ //TODO: add code that controls Spatial,
+ //e.g. spatial.rotate(tpf,tpf,tpf);
+ }
+
+ @Override
+ protected void controlRender(RenderManager rm, ViewPort vp) {
+ //Only needed for rendering-related operations,
+ //not called when spatial is culled.
+ }
+
+ public Control cloneForSpatial(Spatial spatial) {
+ Control control = new ${name}();
+ //TODO: copy parameters to new Control
+ control.setSpatial(spatial);
+ return control;
+ }
+
+ @Override
+ public void read(JmeImporter im) throws IOException {
+ super.read(im);
+ InputCapsule in = im.getCapsule(this);
+ //TODO: load properties of this Control, e.g.
+ //this.value = in.readFloat(value, "name", defaultValue);
+ }
+
+ @Override
+ public void write(JmeExporter ex) throws IOException {
+ super.write(ex);
+ OutputCapsule out = ex.getCapsule(this);
+ //TODO: save properties of this Control, e.g.
+ //out.write(this.value, "name", defaultValue);
+ }
+
+
+}
diff --git a/sdk/jme3-templates/src/com/jme3/gde/templates/layer.xml b/sdk/jme3-templates/src/com/jme3/gde/templates/layer.xml
index 35edf970a..16ad31c49 100644
--- a/sdk/jme3-templates/src/com/jme3/gde/templates/layer.xml
+++ b/sdk/jme3-templates/src/com/jme3/gde/templates/layer.xml
@@ -4,6 +4,7 @@
+
@@ -13,5 +14,18 @@
+
+
+
+
+
+
+
+
+
+
+
+
+