Index: /Users/mo/Documents/workspace/DBIx-Class/lib/DBIx/Class/ResultSet.pm
===================================================================
--- /Users/mo/Documents/workspace/DBIx-Class/lib/DBIx/Class/ResultSet.pm	(revision 4911)
+++ /Users/mo/Documents/workspace/DBIx-Class/lib/DBIx/Class/ResultSet.pm	(working copy)
@@ -12,6 +12,7 @@
 use DBIx::Class::ResultSetColumn;
 use DBIx::Class::ResultSourceHandle;
 use List::Util ();
+use Test::More; # We need is_deeply functionality
 use Scalar::Util ();
 use base qw/DBIx::Class/;
 
@@ -827,7 +828,6 @@
 
 sub _collapse_result {
   my ($self, $as_proto, $row) = @_;
-
   my @copy = @$row;
 
   # 'foo'         => [ undef, 'foo' ]
@@ -942,10 +942,44 @@
       }
     }
   }
-
+	
+	if($self->{attrs}{distinct}) {
+		# $info->[1] contains all the relations, right?
+		$info->[1] = $self->_distinct_result_deeply($info->[1])
+		  if($info->[1]);
+	}
+	
+	
   return $info;
 }
 
+sub _distinct_result_deeply {
+	# this is a recursive method
+	# Definition Recursion: See Recursion :-)
+	my ($self, $info, $rels) = @_;
+	# return if no relations in that row
+	return unless $info;
+	# object for distinct info
+	my $new_info = {};
+	while (my($rel, $data) = each  %{$info}) {
+		for my $row (@{$data}) {
+			push(@{$new_info->{$rel}}, $row)
+			  # check whether this row is already in $new_info
+			  # and ignore if so, otherwise add it to $new_info
+			  unless(
+				grep 
+				  { Test::More::_deep_check($_, $row) } 
+			    @{$new_info->{$rel}||[]});
+			# do the recursion
+			$row->[1] = $self->_distinct_result_deeply($row->[1])
+			  if($row->[1]);
+		}	
+	}
+	return $new_info;
+	
+	
+}
+
 =head2 result_source
 
 =over 4
