diff --git a/src/org.eclipse.ice.client.widgets/src/org/eclipse/ice/client/widgets/properties/AddPropertyAction.java b/src/org.eclipse.ice.client.widgets/src/org/eclipse/ice/client/widgets/properties/AddPropertyAction.java
index 97be8c544fc778d439a25c1cddd2e033f3c6dabf..bef96b49aec636a2bb57e34ccffd50d9ba0e5e97 100644
--- a/src/org.eclipse.ice.client.widgets/src/org/eclipse/ice/client/widgets/properties/AddPropertyAction.java
+++ b/src/org.eclipse.ice.client.widgets/src/org/eclipse/ice/client/widgets/properties/AddPropertyAction.java
@@ -76,6 +76,16 @@ public class AddPropertyAction extends Action {
 		setEnabled((canAdd(tree) != null ? true : false));
 	}
 
+	/**
+	 * Gets the current {@link TreeComposite} to which properties (in the form
+	 * of {@link Entry}s) can be added.
+	 * 
+	 * @return The associated tree. This may be null.
+	 */
+	protected TreeComposite getTree() {
+		return tree;
+	}
+
 	/**
 	 * Gets whether or not the specified <code>TreeComposite</code> can have an
 	 * <code>Entry</code> (aka property or parameter) added to it. The
@@ -88,7 +98,7 @@ public class AddPropertyAction extends Action {
 	 * @return The tree's data node that can receive a new property or
 	 *         parameter, or null if one cannot be added.
 	 */
-	private DataComponent canAdd(TreeComposite tree) {
+	protected DataComponent canAdd(TreeComposite tree) {
 
 		DataComponent dataNode = null;
 
diff --git a/src/org.eclipse.ice.client.widgets/src/org/eclipse/ice/client/widgets/properties/AddTemplatePropertyAction.java b/src/org.eclipse.ice.client.widgets/src/org/eclipse/ice/client/widgets/properties/AddTemplatePropertyAction.java
new file mode 100644
index 0000000000000000000000000000000000000000..07453f781bb71af2cf43e89d5c117124b106a8db
--- /dev/null
+++ b/src/org.eclipse.ice.client.widgets/src/org/eclipse/ice/client/widgets/properties/AddTemplatePropertyAction.java
@@ -0,0 +1,116 @@
+package org.eclipse.ice.client.widgets.properties;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.eclipse.ice.datastructures.form.DataComponent;
+import org.eclipse.ice.datastructures.form.Entry;
+import org.eclipse.ice.datastructures.form.TreeComposite;
+import org.eclipse.ice.datastructures.updateableComposite.Component;
+
+// TODO documentation
+public class AddTemplatePropertyAction extends AddPropertyAction {
+
+	private List<Entry> properties;
+
+	@Override
+	public void run() {
+		super.run();
+
+		// TODO Remove this and do something useful.
+		for (Entry entry : properties) {
+			System.out.println(entry.getName());
+		}
+	}
+
+	/**
+	 * Searches the tree's parent to find the corresponding exemplar tree node
+	 * and retrieves all properties from the exemplar node if it exists.
+	 * <p>
+	 * In this case, properties correspond to <i>ready</i> {@code Entry}s inside
+	 * the exemplar tree node's active {@code DataComponent}.
+	 * </p>
+	 * 
+	 * @param tree
+	 *            The tree node to which template properties can be added.
+	 * @return A list containing the template properties. This method returns an
+	 *         empty list if no template properties can be found.
+	 */
+	private List<Entry> findTemplateProperties(TreeComposite tree) {
+
+		List<Entry> properties = null;
+
+		// Determine the exemplar tree node corresponding to the specified tree
+		// node.
+		if (tree != null) {
+			TreeComposite parent = tree.getParent();
+			if (parent != null && parent.hasChildExemplars()) {
+				DataComponent dataNode = null;
+				List<TreeComposite> exemplars = parent.getChildExemplars();
+				// Use the ID to see if the nodes match.
+				int id = tree.getId();
+				System.out.println(id);
+				System.out.println("Found the parent's child exemplars...");
+				for (TreeComposite exemplar : exemplars) {
+					System.out.println("exemplar: " + exemplar.getName() + " " + exemplar.getId());
+					if (exemplar.getId() == id) {
+						// If we found a match, pull the templated properties
+						// from the active data node.
+						dataNode = (DataComponent) exemplar.getActiveDataNode();
+						// FIXME Shouldn't the active data node be set?
+						if (dataNode == null) {
+							List<Component> dataNodes = exemplar.getDataNodes();
+							if (!dataNodes.isEmpty()) {
+								dataNode = (DataComponent) dataNodes.get(0);
+							}
+						}
+						if (dataNode != null) {
+							properties = dataNode.retrieveAllEntries();
+							// FIXME We should be retrieving ready entries, but there are none...
+//							properties = dataNode.retrieveReadyEntries();
+						}
+						break;
+					}
+				}
+			}
+		}
+
+		// Return an empty list if there was no corresponding exemplar with
+		// templated properties.
+		if (properties == null) {
+			properties = new ArrayList<Entry>(1);
+		}
+
+		return properties;
+	}
+
+	/**
+	 * Sets the current {@link TreeComposite} to which properties (in the form
+	 * of {@link Entry}s) can be added.
+	 * 
+	 * @param tree
+	 *            The parent tree. If null, the action is disabled.
+	 */
+	@Override
+	public void setTree(TreeComposite tree) {
+		// Clear the list of properties.
+		properties = new ArrayList<Entry>(1);
+		// Set the tree.
+		super.setTree(tree);
+		// Update the list of properties and set the enabled flag.
+		properties = findTemplateProperties(tree);
+		setEnabled(!properties.isEmpty());
+
+		return;
+	}
+
+	/**
+	 * Overrides the default behavior. If there are no {@link #properties}, then
+	 * the returned {@code DataComponent} is null.
+	 */
+	@Override
+	protected DataComponent canAdd(TreeComposite tree) {
+		return properties.isEmpty() ? null : super.canAdd(tree);
+	}
+
+}
diff --git a/src/org.eclipse.ice.client.widgets/src/org/eclipse/ice/client/widgets/properties/TreePropertySection.java b/src/org.eclipse.ice.client.widgets/src/org/eclipse/ice/client/widgets/properties/TreePropertySection.java
index 25510ca4180d358c361716f814e4fd7fc5996f2c..34ab7b8546a7180fe55c16529b3b0d558952ce18 100644
--- a/src/org.eclipse.ice.client.widgets/src/org/eclipse/ice/client/widgets/properties/TreePropertySection.java
+++ b/src/org.eclipse.ice.client.widgets/src/org/eclipse/ice/client/widgets/properties/TreePropertySection.java
@@ -124,6 +124,8 @@ public class TreePropertySection extends AbstractPropertySection implements
 	 * The ToolBar action that adds new, blank properties to the {@link #tree}.
 	 */
 	private final AddPropertyAction addAction = new AddPropertyAction();
+	// TODO documentation...
+	private final AddTemplatePropertyAction addTemplatePropertyAction = new AddTemplatePropertyAction();
 	/**
 	 * The ToolBar action that removes properties that are selected in the
 	 * {@link #tableViewer}.
@@ -291,8 +293,10 @@ public class TreePropertySection extends AbstractPropertySection implements
 		}
 
 		addAction.setTree(tree);
+		addTemplatePropertyAction.setTree(tree);
 		removeAction.setTree(tree);
 
+		// TODO Change this to be like the above 3 calls.
 		// Refresh the type Combo widget.
 		refreshTypeWidgets();
 
@@ -426,6 +430,7 @@ public class TreePropertySection extends AbstractPropertySection implements
 		// TODO Make this an ActionTree whose default action is to add a new,
 		// blank property, but with an option to add pre-defined properties.
 		toolBarManager.add(addAction);
+		toolBarManager.add(addTemplatePropertyAction);
 
 		// Create the remove action.
 		tableViewer.addSelectionChangedListener(removeAction);