diff --git a/lib/KorAP/XML/Field/MultiTermTokenStream.pm b/lib/KorAP/XML/Field/MultiTermTokenStream.pm
index 0d8ae05..3b828d5 100644
--- a/lib/KorAP/XML/Field/MultiTermTokenStream.pm
+++ b/lib/KorAP/XML/Field/MultiTermTokenStream.pm
@@ -14,22 +14,48 @@
 };
 
 sub get_node {
-  my ($self, $pos, $term) = @_;
-  my $mtt = $self->pos($pos);
-  my $node = $mtt->grep_mt($term);
+  my ($self, $unit, $term) = @_;
 
-  # TODO: Check if term has PTI 128 - or what is wanted!
+  if ($unit->type eq 'token') {
+    my $mtt = $self->pos($unit->pos);
+    my $node = $mtt->grep_mt($term);
 
-  # TODO: if the node has no TUI - add!
-  return $node if $node;
+    # TODO: Check if term has PTI 128 - or what is wanted!
 
-  my $tui = $self->tui($pos);
-  return $mtt->add(
-    term => $term,
-    pti => 128,
-    payload => '<s>' . $tui,
-    tui => $tui
-  );
+    # TODO: if the node has no TUI - add!
+    return $node if $node;
+
+    my $tui = $self->tui($unit->pos);
+    return $mtt->add(
+      term => $term,
+      pti => 128,
+      payload => '<s>' . $tui,
+      tui => $tui
+    );
+  }
+
+  # Is span
+  else {
+    my $mtt = $self->pos($unit->p_start);
+    my $node = $mtt->grep_mt('<>:' . $term);
+
+    # TODO: if the node has no TUI - add!
+    return $node if $node;
+
+    my $tui = $self->tui($unit->p_start);
+
+    return $mtt->add(
+      term => '<>:' . $term,
+      o_start => $unit->o_start,
+      o_end   => $unit->o_end,
+      p_start => $unit->p_start,
+      p_end   => $unit->p_end,
+      pti => 64,
+      payload => '<b>0<s>' . $tui,
+      tui => $tui
+    );
+
+  };
 };
 
 sub add_meta {
diff --git a/lib/KorAP/XML/Index/Mate/Dependency.pm b/lib/KorAP/XML/Index/Mate/Dependency.pm
index 92885c5..ff28d7f 100644
--- a/lib/KorAP/XML/Index/Mate/Dependency.pm
+++ b/lib/KorAP/XML/Index/Mate/Dependency.pm
@@ -10,6 +10,7 @@
   # >>:xip/d:SUBJ<i>566<i>789
 
   # Relation data
+  # Supports term-to-term and term-to-element only
   $$self->add_tokendata(
     foundry => 'mate',
     layer => 'dependency',
@@ -37,15 +38,14 @@
 	  # I have no clue, what -- should mean
 	  # next if $_->{-label} eq '--';
 
-	  # Target is at the same position!
-	  my $pos = $source->pos;
-
-
 	  # Get target node - not very elegant
 	  my $target = $stream->get_node(
-	    $pos, 'mate/d:' . $NODE_LABEL
+	    $source, 'mate/d:' . $NODE_LABEL
 	  );
 
+	  # Target is at the same position!
+	  my $pos = $source->pos;
+
 	  my %rel = (
 	    pti => 32, # term-to-term relation
 	    payload =>
@@ -72,24 +72,23 @@
 	  my $from = $_->{span}->{-from};
 	  my $to   = $_->{span}->{-to};
 
+	  # Get source node
+	  my $source_term = $stream->get_node(
+	    $source, 'mate/d:' . $NODE_LABEL
+	  );
+
 	  # Target
 	  my $target = $tokens->token($from, $to);
 
+	  # Relation is term-to-term with a found target!
 	  if ($target) {
-	    # Relation is term-to-term with a found target!
-
-	    # Get source node
-	    my $source_term = $stream->get_node(
-	      $source->pos, 'mate/d:' . $NODE_LABEL
-	    );
 
 	    # Get target node
 	    my $target_term = $stream->get_node(
-	      $target->pos, 'mate/d:' . $NODE_LABEL
+	      $target, 'mate/d:' . $NODE_LABEL
 	    );
 
-	    $mtt->add(
-	      term => '>:mate/d:' . $label,
+	    my %rel = (
 	      pti => 32, # term-to-term relation
 	      payload =>
 		'<i>' . $target->pos . # right part token position
@@ -97,36 +96,44 @@
 		    '<s>' . $target_term->tui # right part tui
 		  );
 
+	    $mtt->add(
+	      term => '>:mate/d:' . $label,
+	      %rel
+	    );
+
 	    my $target_mtt = $stream->pos($target->pos);
 	    $target_mtt->add(
 	      term => '<:mate/d:' . $label,
-	      pti => 32, # term-to-term relation
-	      payload =>
-		'<i>' . $target->pos . # right part token position (TODO: THIS IS PROBABLY WRONG!)
-		  '<s>' . $source_term->tui . # left part tui
-		    '<s>' . $target_term->tui # right part tui
-
+	      %rel
 	    );
 	  }
-	  else {
 
-	    # TODO: SPANS not yet supported
-	    next;
+	  # Relation is possibly term-to-element with a found target!
+	  elsif ($target = $tokens->span($from, $to)) {
+
+	    # Get target node
+	    my $target_span = $stream->get_node(
+	      $target, 'mate/d:' . $NODE_LABEL
+	    );
+
+	    my %rel = (
+	      pti => 33, # term-to-element relation
+	      payload =>
+		'<i>' . $target->p_start . # right part token position
+		  '<s>' . $source_term->tui . # left part tui
+		    '<s>' . $target_span->tui # right part tui
+		  );
+
+	    $mtt->add(
+	      term => '>:mate/d:' . $label,
+	      %rel
+	    );
+
+	    $mtt->add(
+	      term => '<:mate/d:' . $label,
+	      %rel
+	    );
 	  };
-
-
-	  # Temporary
-	  next;
-
-	  $mtt->add(
-	    term => '>:mate/d:' . $label,
-	    payload => '<i>' . $target->pos
-	  );
-
-	  $stream->pos($target->pos)->add(
-	    term => '<:mate/d:' . $label,
-	    payload => '<i>' . $source->pos
-	  );
 	};
       };
     }) or return;
diff --git a/lib/KorAP/XML/Tokenizer/Span.pm b/lib/KorAP/XML/Tokenizer/Span.pm
index 9e34aec..b359e14 100644
--- a/lib/KorAP/XML/Tokenizer/Span.pm
+++ b/lib/KorAP/XML/Tokenizer/Span.pm
@@ -7,6 +7,10 @@
   bless [], shift;
 };
 
+sub type {
+  'span';
+};
+
 sub o_start {
   if (defined $_[1]) {
     $_[0]->[0] = $_[1];
diff --git a/lib/KorAP/XML/Tokenizer/Token.pm b/lib/KorAP/XML/Tokenizer/Token.pm
index 36334db..815f9e8 100644
--- a/lib/KorAP/XML/Tokenizer/Token.pm
+++ b/lib/KorAP/XML/Tokenizer/Token.pm
@@ -7,6 +7,10 @@
   bless [], shift;
 };
 
+sub type {
+  'token';
+};
+
 # get or set token position
 sub pos {
   if (defined $_[1]) {
