diff --git a/CONCEPTS.txt b/CONCEPTS.txt
index ff11e52..9f1c49f 100644
--- a/CONCEPTS.txt
+++ b/CONCEPTS.txt
@@ -1,17 +1,38 @@
 -- SUMMARY --
 
-Describes relations between entities.
+Describes relations between entities (comment, node, user etc).
 
-The intent of this module is to provide an API that describes the relations
-between entities. For example:
-  comments <--> nodes
-  users <--> images
+Here's how every relation looks:
 
-Relations can relate more than two entities, eg:
-  areSiblings -> (john, jen, jack, jess)
+  Relation
+       |
+       +----+ entity 1
+       |
+       +----+ entity 2
+       |
+      ...
+       |
+       +----+ entity N
 
-And for 2-ary relations, relations can be directional, ie:
-  bruno -> isChildOf -> boglarka
+
+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:
diff --git a/relation_dummy_field/relation_dummy_field.module b/relation_dummy_field/relation_dummy_field.module
index aedb436..8fcc44a 100644
--- a/relation_dummy_field/relation_dummy_field.module
+++ b/relation_dummy_field/relation_dummy_field.module
@@ -144,6 +144,7 @@
         $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 +163,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(
diff --git a/relation_ui.module b/relation_ui.module
index 0c7575d..accb8ff 100644
--- a/relation_ui.module
+++ b/relation_ui.module
@@ -256,11 +256,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'));
@@ -270,11 +265,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) {
@@ -330,8 +320,8 @@
  */
 function relation_ui_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,
