=== modified file 'CONCEPTS.txt'
--- old/CONCEPTS.txt	2011-12-05 21:51:25 +0000
+++ new/CONCEPTS.txt	2011-12-05 21:51:34 +0000
@@ -1,17 +1,38 @@
 -- SUMMARY --
 
-Describes relations between entities.
-
-The intent of this module is to provide an API that describes the relations
-between entities. For example:
-  comments <--> nodes
-  users <--> images
-
-Relations can relate more than two entities, eg:
-  areSiblings -> (john, jen, jack, jess)
-
-And for 2-ary relations, relations can be directional, ie:
-  bruno -> isChildOf -> boglarka
+Describes relations between entities (comment, node, user etc).
+
+Here's how every relation looks:
+
+  Relation
+       |
+       +----+ entity 1
+       |
+       +----+ entity 2
+       |
+      ...
+       |
+       +----+ entity N
+
+
+Every relation looks like this. N is called the arity of the relation.
+For directional relations, entity 1 is called the source, the rest are called
+targets.
+
+An example of a non-directional, n-ary relation:
+
+  siblings(john, jen, jack, jess)
+
+A binary, directional relation:
+
+  child(bruno, Boglarka)
+
+Relations can be directional, ie:
+  parent(boglarka, bruno, sara)
+
+Where Bruno and Sara are siblings http://www.flickr.com/photos/pnegyesi/6041665852
+and Boglarka are their mother. Once again, the first entity has a special
+role, in this case, it's the parent. 
 
 Relations are entities, so they can relate relations to other entities, for
 example:

=== modified file 'relation.admin.inc'
--- old/relation.admin.inc	2011-12-05 21:51:25 +0000
+++ new/relation.admin.inc	2011-12-05 21:56:37 +0000
@@ -142,11 +142,6 @@
     '#options' => $options,
     '#description' => t('Minimum number of entities joined by relations of this type (e.g. three siblings in one relation). <em>In nearly all cases you will want to leave this set to 2</em>.'),
     '#default_value' => $relation_type->min_arity ? $relation_type->min_arity : 2,
-    '#states' => array(
-      'disabled' => array(   // action to take.
-        ':input[name="directional"]' => array('checked' => TRUE),
-      ),
-    ),
   );
 
   $options = array('2' => '2', '3' => '3', '4' => '4', '5' => '5', '6' => '6', '7' => '7', '8' => '8', '0' => t('Infinite'));
@@ -156,11 +151,6 @@
     '#options' => $options,
     '#description' => t('Maximum number of entities joined by relations of this type. <em>In nearly all cases you will want to leave this set to 2</em>.'),
     '#default_value' => isset($relation_type->max_arity) ? $relation_type->max_arity : 2,
-    '#states' => array(
-      'disabled' => array(   // action to take.
-        ':input[name="directional"]' => array('checked' => TRUE),
-      ),
-    ),
   );
   $counter = 0;
   foreach (entity_get_info() as $entity_type => $entity) {
@@ -216,8 +206,8 @@
  */
 function relation_type_form_submit($form, &$form_state) {
   $relation_type = $form_state['values']['relation_type'];
-  $min_arity = $form_state['values']['directional'] ? 2 : $form_state['values']['advanced']['min_arity'];
-  $max_arity = $form_state['values']['directional'] ? 2 : $form_state['values']['advanced']['max_arity'];
+  $min_arity = $form_state['values']['advanced']['min_arity'];
+  $max_arity = $form_state['values']['advanced']['max_arity'];
   $record = array(
     'relation_type'   => $relation_type,
     'min_arity'   => $min_arity,
@@ -423,7 +413,7 @@
   $form['name'] = array(
     '#type' => 'textfield',
     '#title' => t('Relation type name'),
-    '#description' => t('Enter the machine name to use for this relation type if it is different from the relation type to be imported. Leave blank to use the name of the relaiton type below.'),
+    '#description' => t('Enter the machine name to use for this relation type if it is different from the relation type to be imported. Leave blank to use the name of the relation type below.'),
   );
   $form['relation_type'] = array(
     '#type' => 'textarea',

=== modified file 'relation_add/relation_add.module'
--- old/relation_add/relation_add.module	2011-12-05 21:51:25 +0000
+++ new/relation_add/relation_add.module	2011-12-05 21:51:34 +0000
@@ -102,7 +102,7 @@
       $types[$relation_type->relation_type] = $relation_type->label;
     }
     foreach ($reverse_types as $relation_type) {
-      if ($relation_type->directional  && $relation_type->max_arity==2) { // Directional n-ary relations are f@*#ing stupid.
+      if ($relation_type->directional) { 
         // Machine name doesn't have colons, so we add a suffix for reverse relations, which we explode off later.
         $types[$relation_type->relation_type . ':reverse'] = $relation_type->reverse_label ? $relation_type->reverse_label : 'reverse ' . $relation_type->reverse_label;
       }

=== modified file 'relation_dummy_field/relation_dummy_field.module'
--- old/relation_dummy_field/relation_dummy_field.module	2011-12-05 21:51:25 +0000
+++ new/relation_dummy_field/relation_dummy_field.module	2011-12-05 22:57:41 +0000
@@ -144,6 +144,8 @@
         $relation_type = relation_type_load($relation->relation_type);
 
         $subject = entity_label($entity_type, $entity) . ' '; // Subject of the sentence.
+        $subject_is_source = ($relation->endpoints[LANGUAGE_NONE]['0']['entity_id']) == $id ? TRUE : FALSE;
+
         $count = 0; // For comma separation of objects.
         $duplicate = FALSE; // To make sure duplicates of $entity get included in object list.
         $objects = ''; // Comma separated list of entities that are the object of the sentence.
@@ -162,14 +164,20 @@
             }
           }
           else {
-            $object_entities = entity_load($endpoint['entity_type'], array($endpoint['entity_id']));
-            $object_entity = reset($object_entities);
-            $object_label = entity_label($endpoint['entity_type'], $object_entity);
-            $object_uri = entity_uri($endpoint['entity_type'], $object_entity);
-            // Just add a space before the first element, comma and space before further ones.
-            $objects .= $count ? ', ' : ' ';
-            $count += 1;
-            $objects .= l($object_label, $object_uri['path']);
+            // If the relation is directional and the subject isn't the source,
+            // we want to list the source without any siblings. If it is
+            // directional and the subject is a source, list all targets.
+            // If non-directional, list everything as normal.
+            if (!$relation_type->directional || $subject_is_source || $endpoint['r_index'] == 0) {
+              $object_entities = entity_load($endpoint['entity_type'], array($endpoint['entity_id']));
+              $object_entity = reset($object_entities);
+              $object_label = entity_label($endpoint['entity_type'], $object_entity);
+              $object_uri = entity_uri($endpoint['entity_type'], $object_entity);
+              // Just add a space before the first element, comma and space before further ones.
+              $objects .= $count ? ', ' : ' ';
+              $count += 1;
+              $objects .= l($object_label, $object_uri['path']);
+            }
           }
         }
         $element[$delta]['relation'] = array(


