diff --git a/entity.module b/entity.module
index 08e4662..5ecd7ed 100644
--- a/entity.module
+++ b/entity.module
@@ -993,6 +993,14 @@ function entity_menu() {
   foreach (entity_ui_controller() as $controller) {
     $items += $controller->hook_menu();
   }
+  
+  $items['entity-node-display-example'] =
+  array(
+    'title' => "Node Display Example",
+    'page callback' => "entity_node_display_example",
+    'access arguments' => array('administer')
+  );
+  
   return $items;
 }
 
@@ -1220,6 +1228,8 @@ function entity_entity_info_alter(&$entity_info) {
       $entity_info[$type]['configuration'] = !empty($info['exportable']);
     }
   }
+  
+  $entity_info['node']['view callback'] = "entity_node_view_by_property_info";
 }
 
 /**
@@ -1299,3 +1309,40 @@ function entity_ctools_plugin_directory($module, $plugin) {
     return 'ctools/content_types';
   }
 }
+
+function entity_node_view_by_property_info($entities, $view_mode, $what, $entity_type){
+  foreach($entities as $entity){
+    $node = entity_metadata_wrapper($entity_type, $entity);
+    return $node->display();
+  }
+}
+
+function text_field_widget($vw){
+  $info = $vw->info();
+  return array(
+    '#type' => 'textfield',
+    '#title' => t($info['label']),
+    '#default_value' => $vw->value(),
+    '#size' => 60,
+    '#maxlength' => 128,
+    '#required' => $info['required'],
+  );
+}
+
+function header_formatter($vw){
+  return array('#markup' => "<h1>{$vw->value()}</h1>");
+}
+
+function entity_general_widget_form($form, &$state, $passed_form){
+  $form = $passed_form;
+  return $form;
+}
+
+function entity_general_widget_form_submit($form, &$state){
+  $wrapper = $state['values']['entity_wrapper'];
+  $wrapper->submitForm($state);
+}
+
+function entity_node_display_example(){
+  return entity_view('node', entity_load('node', array(1)));
+}
diff --git a/includes/entity.wrapper.inc b/includes/entity.wrapper.inc
index 9c78d35..8a26a0b 100644
--- a/includes/entity.wrapper.inc
+++ b/includes/entity.wrapper.inc
@@ -268,6 +268,17 @@ class EntityValueWrapper extends EntityMetadataWrapper {
     }
     return $data;
   }
+  
+  public function display(){
+    if(array_key_exists('display', $this->info)){
+      if($this->info['display']['type'] == "widget"){
+        $this->info['parent']->widget = TRUE;
+      }
+      return array($this->info['name'] => $this->info['display']['callback']($this));
+    }
+    
+    return array();
+  }
 }
 
 /**
@@ -576,6 +587,7 @@ class EntityDrupalWrapper extends EntityStructureWrapper {
   protected $id = FALSE;
   protected $bundle;
   protected $entityInfo;
+  public $widget = FALSE;
 
   /**
    * Construct a new EntityDrupalWrapper object.
@@ -827,6 +839,37 @@ class EntityDrupalWrapper extends EntityStructureWrapper {
     // If the entity hasn't been loaded yet, don't bother saving it.
     return $this;
   }
+  
+  public function display(){
+    $display = array();
+    foreach($this->getPropertyInfo() as $property => $info){
+      $po = $this->{$property};
+      if(get_class($po) == "EntityValueWrapper"){
+        $display += $po->display();
+      }
+    }
+    if($this->widget){
+      $display['submit'] = array('#type' => 'submit', '#value' => t('Submit'));
+      $display['entity_wrapper'] = array('#type'=>'value', '#value'=>$this);
+      return drupal_get_form('entity_general_widget_form',$display);
+    }else{
+      return $display;
+    }
+  }
+  
+  public function submitForm($form_state){
+    $values = $form_state['values'];
+    foreach($this->getPropertyInfo() as $property => $info){
+      $po = $this->{$property};
+      if(get_class($po) == "EntityValueWrapper"){
+        $property_name = $po->info['name'];
+        if(array_key_exists($property_name, $values)){
+          $this->{$property_name}->set($values[$property_name]);
+        }
+      }
+    }
+    $this->save();
+  }
 
   /**
    * Permanently delete the wrapped entity.
diff --git a/modules/node.info.inc b/modules/node.info.inc
index e4c15b7..1d4a39d 100644
--- a/modules/node.info.inc
+++ b/modules/node.info.inc
@@ -47,6 +47,7 @@ function entity_metadata_node_entity_property_info() {
     'label' => t("Title"),
     'description' => t("The title of the node."),
     'setter callback' => 'entity_property_verbatim_set',
+    'display' => array('type' =>'widget', 'callback' => 'text_field_widget'),
     'schema field' => 'title',
     'required' => TRUE,
   );
@@ -65,6 +66,7 @@ function entity_metadata_node_entity_property_info() {
     'getter callback' => 'entity_metadata_entity_get_properties',
     'type' => 'uri',
     'computed' => TRUE,
+    'display' => array('type' => 'formatter', 'callback' => 'header_formatter')
   );
   $properties['edit_url'] = array(
     'label' => t("Edit URL"),
