Index: server/trunk/web/lib/Sophie/Controller/Analysis.pm
===================================================================
--- server/trunk/web/lib/Sophie/Controller/Analysis.pm	(revision 306)
+++ server/trunk/web/lib/Sophie/Controller/Analysis.pm	(revision 310)
@@ -71,6 +71,5 @@
     $c->stash->{xmlrpc} = $c->forward(
         '/analysis/solver/find_requirements',
-        [ $c->session->{analyse_dist},
-            'P', \@deplist, \@folderid ]
+        [ $c->session->{analyse_dist}, \@deplist, \@folderid ]
     );
 }
@@ -100,5 +99,86 @@
 
     $c->forward('/analysis/solver/find_requirements',
-        [ $distspec, 'P', \@deplist, $pool ]);
+        [ $distspec, \@deplist, $pool ]);
+}
+
+sub find_conflicts : XMLRPC {
+    my ($self, $c, $distspec, $id, $pool) = @_;
+    $pool ||= $id;
+    my @provides;
+    foreach my $dep ($c->model('Base::UsersDeps')->search(
+        {
+            pid => [ $id ],
+            deptype => 'C',
+        },
+        {
+            select => [ 'rpmsenseflag("flags")',
+                qw(depname flags evr deptype) ],
+            as => [ qw'sense depname flags evr deptype' ],
+        }
+        )->all) {
+        $dep->get_column('depname') =~ /^rpmlib\(/ and next;
+        push(@provides, [
+                $dep->get_column('depname'),
+                $dep->get_column('sense'),
+                $dep->get_column('evr') ]);
+    }
+    my @conflicts;
+    foreach my $dep ($c->model('Base::UsersDeps')->search(
+        {
+            pid => [ $id ],
+            deptype => 'C',
+        },
+        {
+            select => [ 'rpmsenseflag("flags")',
+                qw(depname flags evr deptype) ],
+            as => [ qw'sense depname flags evr deptype' ],
+        }
+        )->all) {
+        $dep->get_column('depname') =~ /^rpmlib\(/ and next;
+        push(@conflicts, [
+                $dep->get_column('depname'),
+                $dep->get_column('sense'),
+                $dep->get_column('evr') ]);
+    }
+
+    $c->forward('/analysis/solver/find_conflicts',
+        [ $distspec, \@conflicts, \@provides, $pool ]);
+}
+
+sub is_obsoleted : XMLRPC {
+    my ($self, $c, $distspec, $id, $pool) = @_;
+    
+    my $pkg = $c->model('Base::UsersRpms')->find(
+        { id => $id }
+    );
+
+    $c->forward('/analysis/solver/is_obsoleted',
+        [ $distspec, [ [ $pkg->name, '=', $pkg->evr ] ], $pool ]
+    );
+}
+
+sub is_updated : XMLRPC {
+    my ($self, $c, $distspec, $id, $pool) = @_;
+    my $pkg = $c->model('Base::UsersRpms')->find(
+        { id => $id }
+    );
+
+    $c->forward('/analysis/solver/is_updated',
+        [ $distspec, [ $pkg->name, '>=', $pkg->evr ], $pool ]
+    );
+}
+
+sub files_conflicts : XMLRPC {
+    my ($self, $c, $distspec, $id, $pool) = @_;
+    my @files = 
+        map { { $_->get_columns } } 
+        grep { $_->dirname }
+        $c->model('Base::UsersFiles')->search(
+            { pid => $id }
+    );
+
+    $c->forward('/analysis/solver/files_conflicts',
+        [ $distspec, \@files, $pool ]
+    );
 }
 
Index: server/trunk/web/lib/Sophie/Controller/Analysis/Solver.pm
===================================================================
--- server/trunk/web/lib/Sophie/Controller/Analysis/Solver.pm	(revision 306)
+++ server/trunk/web/lib/Sophie/Controller/Analysis/Solver.pm	(revision 310)
@@ -28,5 +28,5 @@
 }
 
-sub find_requirements : XMLRPC {
+sub solve_dependencies : Private {
     my ($self, $c, $searchspec, $over, $deplist, $pool) = @_;
 
@@ -122,5 +122,56 @@
 }
 
-sub parentdir : XMLRPC {
+sub find_requirements : Private {
+    my ($self, $c, $searchspec, $deplist, $pool) = @_;
+    $c->forward('solve_dependencies', [ $searchspec, 'P', $deplist, $pool ]);
+}
+
+sub find_conflicts : Private {
+    my ($self, $c, $searchspec, $conflicts, $provides, $pool) = @_;
+    my $resp = $c->forward('solve_dependencies', [ $searchspec, 'P', $conflicts, $pool ]);
+    my $resc = $c->forward('solve_dependencies', [ $searchspec, 'C', $provides,  $pool ]);
+    $c->stash->{xmlrpc} = {
+        pkg => [ @{ $resp->{pkg} }, @{ $resc->{pkg} } ],
+        pool => [ @{ $resp->{pool} }, @{ $resc->{pool} } ],
+    }
+}
+
+sub is_obsoleted : Private {
+    my ($self, $c, $searchspec, $deplist, $pool) = @_;
+    $c->forward('solve_dependencies', [ $searchspec, 'O', $deplist, $pool ]);
+}
+
+sub is_updated : Private {
+    my ($self, $c, $searchspec, $deplist, $pool) = @_;
+    my $pkgid = $c->forward('/search/rpm/byname', [ $searchspec, @{ $deplist } ]);
+    $c->stash->{xmlrpc} = {
+        pkg => $pkgid,
+        pool => [],
+    }
+}
+
+sub files_conflicts : Private {
+    my ($self, $c, $searchspec, $files, $pool) = @_;
+
+    my %fc;
+    my %pkgid;
+    foreach my $file (@{ $files || []}) {
+        my $res = $c->forward('/search/file/byname',
+            [ $searchspec,  $file->{dirname} . $file->{basename} ]);
+        foreach (@{ $res }) {
+            if (($_->{md5} || '') eq ($file->{md5} || '')) {
+                next;
+            }
+            push(@{ $fc{$file->{dirname} . $file->{basename}}}, $_->{pkgid});
+            $pkgid{$_->{pkgid}} = 1;
+        }
+    }
+    $c->stash->{xmlrpc} = {
+        pkg => [ keys %pkgid ],
+        byfile => \%fc,
+    }
+}
+
+sub parentdir : Private {
     my ($self, $c, $searchspec, $folder, $pool) = @_;
 
Index: server/trunk/web/lib/Sophie/Controller/Rpms.pm
===================================================================
--- server/trunk/web/lib/Sophie/Controller/Rpms.pm	(revision 306)
+++ server/trunk/web/lib/Sophie/Controller/Rpms.pm	(revision 310)
@@ -565,5 +565,5 @@
 
         $c->stash->{xmlrpc} = $c->forward(
-            '/analysis/solver/find_requirements',
+            '/analysis/solver/solve_dependencies',
             [ $dist,
                 'P', \@deplist, [] ]
Index: server/trunk/web/lib/Sophie/Controller/User/Folder.pm
===================================================================
--- server/trunk/web/lib/Sophie/Controller/User/Folder.pm	(revision 306)
+++ server/trunk/web/lib/Sophie/Controller/User/Folder.pm	(revision 310)
@@ -128,4 +128,8 @@
                         ? $tags->{Dirnames}{string}[$tags->{Dirindexes}{integer}[$fcount]]
                         : ''),
+                    mode => $tags->{Filemodes}{integer}[$fcount],
+                    md5 => ref $tags->{Filedigests}{string}[$fcount] 
+                        ? undef
+                        : $tags->{Filedigests}{string}[$fcount],
                 }
             );
