diff --git a/includes/XtoolsBlueprintPlaceholder.inc b/includes/XtoolsBlueprintPlaceholder.inc
index 905c4a2..fb98179 100644
--- a/includes/XtoolsBlueprintPlaceholder.inc
+++ b/includes/XtoolsBlueprintPlaceholder.inc
@@ -22,13 +22,29 @@ class XtoolsBlueprintPlaceholder implements XtoolsBlueprintInterface {
    * Implements XtoolsBlueprint::getLabel().
    */
   function getLabel() {
-    return xtools_blueprint_info($this->blueprint_name)->getLabel();
+    return $this->blueprint()->getLabel();
   }
 
   /**
    * Implements XtoolsBlueprint::validate().
    */
   function validate($data, array &$asserts, $path) {
-    return xtools_blueprint_info($this->blueprint_name)->validate($data, $asserts, $path);
+    return $this->blueprint()->validate($data, $asserts, $path);
+  }
+
+  /**
+   * Load the blueprint.
+   *
+   * @throws Exception
+   *
+   * @return XtoolsBlueprintInterface
+   */
+  function blueprint () {
+    if ($blueprint = xtools_blueprint_info($this->blueprint_name)) {
+      return $blueprint;
+    }
+    throw new Exception(t('Blueprint !blueprint_name could not be loaded by xtools_blueprint_info().', array(
+      '!blueprint_name' => $this->blueprint_name,
+    )));
   }
 }
\ No newline at end of file
diff --git a/includes/XtoolsBlueprintScalar.inc b/includes/XtoolsBlueprintScalar.inc
new file mode 100644
index 0000000..bc2c4ef
--- /dev/null
+++ b/includes/XtoolsBlueprintScalar.inc
@@ -0,0 +1,21 @@
+<?php
+
+class XtoolsBlueprintScalar implements XtoolsBlueprintInterface {
+
+  /**
+   * Implements XtoolsBlueprint::getLabel().
+   */
+  function getLabel() {
+    return 'scalar';
+  }
+
+  /**
+   * Implements XtoolsBlueprint::validate().
+   */
+  function validate($data, array &$asserts, $path) {
+    $valid = is_scalar($data);
+    $asserts[] = new XtoolsAssert($valid, "variable $path is of type " . $this->getLabel());
+
+    return $valid ? $this : FALSE;
+  }
+}
\ No newline at end of file
diff --git a/includes/XtoolsSignaturePlaceholder.inc b/includes/XtoolsSignaturePlaceholder.inc
index 1805290..52909cc 100644
--- a/includes/XtoolsSignaturePlaceholder.inc
+++ b/includes/XtoolsSignaturePlaceholder.inc
@@ -29,8 +29,22 @@ class XtoolsSignaturePlaceholder extends XtoolsSignature {
    * Implements XtoolsSignature::validate().
    */
   function validate($callable, array &$asserts = array()) {
-    $signature = xtools_signature_info($this->signature_name);
+    return $this->signature()->validate($callable, $asserts);
+  }
 
-    return $signature->validate($callable, $asserts);
+  /**
+   * Load the signature.
+   *
+   * @throws Exception
+   *
+   * @return XtoolsSignature
+   */
+  function signature () {
+    if ($signature = xtools_signature_info($this->signature_name)) {
+      return $signature;
+    }
+    throw new Exception(t('Signature !signature_name could not be loaded by xtools_signature_info().', array(
+      '!signature_name' => $this->signature_name,
+    )));
   }
 }
\ No newline at end of file
diff --git a/xtools.info b/xtools.info
index e726b1e..8487681 100644
--- a/xtools.info
+++ b/xtools.info
@@ -15,6 +15,7 @@ files[] = includes/XtoolsBlueprintObject.inc
 files[] = includes/XtoolsBlueprintOr.inc
 files[] = includes/XtoolsBlueprintOrValue.inc
 files[] = includes/XtoolsBlueprintPrimitive.inc
+files[] = includes/XtoolsBlueprintScalar.inc
 files[] = includes/XtoolsBlueprintString.inc
 files[] = includes/XtoolsBlueprintURL.inc
 files[] = includes/XtoolsCallableType.inc
diff --git a/xtools.xtools.inc b/xtools.xtools.inc
index 5034af6..c9c74d4 100644
--- a/xtools.xtools.inc
+++ b/xtools.xtools.inc
@@ -550,6 +550,8 @@ function xtools_xtools_blueprint_info() {
   // keep the "XtoolsBlueprintInterface" as the last item in the array.
   $blueprints['XtoolsBlueprint'] = new XtoolsBlueprintOr(array(
     // Test a few specific blueprint types first.
+    new XtoolsBlueprintPlaceholder('XtoolsBlueprintOr'),
+    new XtoolsBlueprintPlaceholder('XtoolsBlueprintOrValue'),
     new XtoolsBlueprintPlaceholder('XtoolsBlueprintArray'),
     new XtoolsBlueprintPlaceholder('XtoolsBlueprintObject'),
     new XtoolsBlueprintPlaceholder('XtoolsBlueprintPrimitive'),
@@ -587,6 +589,14 @@ function xtools_xtools_blueprint_info() {
     ), 'integer'), TRUE),
   ));
 
+  // Class XtoolsBlueprintOrValue.
+  $blueprints['XtoolsBlueprintOrValue'] = new XtoolsBlueprintObject('XtoolsBlueprintOrValue', array(
+    'allowed_values' => new XtoolsBlueprintChildElement(new XtoolsBlueprintArray(array(), array(
+      new XtoolsBlueprintChildElement(new XtoolsBlueprintScalar),
+      new XtoolsBlueprintChildElement(new XtoolsBlueprintNULL),
+    ), 'integer'), TRUE),
+  ));
+
   // Class XtoolsBlueprintPrimitive.
   $blueprints['XtoolsBlueprintPrimitive'] = new XtoolsBlueprintObject('XtoolsBlueprintPrimitive', array(
     'type' => new XtoolsBlueprintChildElement(new XtoolsBlueprintString, TRUE),
