remove obsolete states, add support for product type, fix flags parsing
[platform/upstream/libsolv.git] / doc / libsolv-bindings.3
index cac2a7f..6edf92b 100644 (file)
@@ -1,13 +1,13 @@
 '\" t
-.\"     Title: libsolv-bindings
+.\"     Title: Libsolv-Bindings
 .\"    Author: [see the "Author" section]
-.\" Generator: DocBook XSL Stylesheets v1.76.1 <http://docbook.sf.net/>
-.\"      Date: 06/04/2013
+.\" Generator: DocBook XSL Stylesheets v1.78.0 <http://docbook.sf.net/>
+.\"      Date: 09/24/2013
 .\"    Manual: LIBSOLV
 .\"    Source: libsolv
 .\"  Language: English
 .\"
-.TH "LIBSOLV\-BINDINGS" "3" "06/04/2013" "libsolv" "LIBSOLV"
+.TH "LIBSOLV\-BINDINGS" "3" "09/24/2013" "libsolv" "LIBSOLV"
 .\" -----------------------------------------------------------------
 .\" * Define some portability stuff
 .\" -----------------------------------------------------------------
 libsolv-bindings \- access libsolv from perl/python/ruby
 .SH "DESCRIPTION"
 .sp
-bla bla bla
-.SH "THE POOL"
+Libsolv\(cqs language bindings offer an abstract, object orientated interface to the library\&. The supported languages are currently perl, python, and ruby\&. All example code (except in the specifics sections, of course) lists first the \(lqC\-ish\(rq interface, then the syntax for perl, python, and ruby (in that order)\&.
+.SH "PERL SPECIFICS"
+.sp
+Libsolv\(cqs perl bindings can be loaded with the following statement:
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+\fBuse solv\fR;
+.fi
+.if n \{\
+.RE
+.\}
+.sp
+Objects are either created by calling the new() method on a class or they are returned by calling methods on other objects\&.
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+my \fI$pool\fR \fB= solv::Pool\->new()\fR;
+my \fI$repo\fR \fB=\fR \fI$pool\fR\fB\->add_repo("my_first_repo")\fR;
+.fi
+.if n \{\
+.RE
+.\}
+.sp
+Swig encapsulates all objects as tied hashes, thus the attributes can be accessed by treating the object as standard hash reference:
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+\fI$pool\fR\fB\->{appdata} = 42\fR;
+\fBprintf "appdata is %d\en",\fR \fI$pool\fR\fB\->{appdata}\fR;
+.fi
+.if n \{\
+.RE
+.\}
+.sp
+A special exception to this are iterator objects, they are encapsulated as tied arrays so that it is possible to iterate with a for() statement:
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+my \fI$iter\fR \fB=\fR \fI$pool\fR\fB\->solvables_iter()\fR;
+\fBfor my\fR \fI$solvable\fR \fB(\fR\fI@$iter\fR\fB) { \&.\&.\&. }\fR;
+.fi
+.if n \{\
+.RE
+.\}
+.sp
+As a downside of this approach, iterator objects cannot have attributes\&.
+.sp
+If an array needs to be passed to a method it is usually done by reference, if a method returns an array it returns it on the stack:
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+my \fI@problems\fR \fB=\fR \fI$solver\fR\fB\->solve(\e\fR\fI@jobs\fR\fB)\fR;
+.fi
+.if n \{\
+.RE
+.\}
+.sp
+Due to a bug in swig, stringification does not work for libsolv\(cqs objects\&. Instead, you have to call the object\(cqs str() method\&.
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+\fBprint\fR \fI$dep\fR\fB\->str() \&. "\e\fR\fIn\fR\fB"\fR;
+.fi
+.if n \{\
+.RE
+.\}
+.sp
+Swig implements all constants as numeric variables (instead of the more natural constant subs), so don\(cqt forget the leading \(lq$\(rq when accessing a constant\&. Also do not forget to prepend the namespace of the constant:
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+\fI$pool\fR\fB\->set_flag($solv::Pool::POOL_FLAG_OBSOLETEUSESCOLORS, 1)\fR;
+.fi
+.if n \{\
+.RE
+.\}
+.SH "PYTHON SPECIFICS"
+.sp
+The python bindings can be loaded with:
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+\fBimport solv\fR
+.fi
+.if n \{\
+.RE
+.\}
+.sp
+Objects are either created by calling the constructor method for a class or they are returned by calling methods on other objects\&.
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+\fIpool\fR \fB= solv\&.Pool()\fR
+\fIrepo\fR \fB=\fR \fIpool\fR\fB\&.add_repo("my_first_repo")\fR
+.fi
+.if n \{\
+.RE
+.\}
+.sp
+Attributes can be accessed as usual:
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+\fIpool\fR\fB\&.appdata = 42\fR
+\fBprint "appdata is %d" % (\fR\fIpool\fR\fB\&.appdata)\fR
+.fi
+.if n \{\
+.RE
+.\}
+.sp
+Iterators also work as expected:
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+\fBfor\fR \fIsolvable\fR \fBin\fR \fIpool\fR\fB\&.solvables_iter():\fR
+.fi
+.if n \{\
+.RE
+.\}
+.sp
+Arrays are passed and returned as list objects:
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+\fIjobs\fR \fB= []\fR
+\fIproblems\fR \fB=\fR \fIsolver\fR\fB\&.solve(\fR\fIjobs\fR\fB)\fR
+.fi
+.if n \{\
+.RE
+.\}
+.sp
+The bindings define stringification for many classes, some also have a \fIrepr\fR method to ease debugging\&.
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+\fBprint\fR \fIdep\fR
+\fBprint repr(\fR\fIrepo\fR\fB)\fR
+.fi
+.if n \{\
+.RE
+.\}
+.sp
+Constants are attributes of the classes:
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+\fIpool\fR\fB\&.set_flag(solv\&.Pool\&.POOL_FLAG_OBSOLETEUSESCOLORS, 1)\fR;
+.fi
+.if n \{\
+.RE
+.\}
+.SH "RUBY SPECIFICS"
+.sp
+The ruby bindings can be loaded with:
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+\fBrequire \*(Aqsolv\*(Aq\fR
+.fi
+.if n \{\
+.RE
+.\}
+.sp
+Objects are either created by calling the new method on a class or they are returned by calling methods on other objects\&. Note that all classes start with an uppercase letter in ruby, so the class is called \(lqSolv\(rq\&.
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+\fIpool\fR \fB= Solv::Pool\&.new\fR
+\fIrepo\fR \fB=\fR \fIpool\fR\fB\&.add_repo("my_first_repo")\fR
+.fi
+.if n \{\
+.RE
+.\}
+.sp
+Attributes can be accessed as usual:
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+\fIpool\fR\fB\&.appdata = 42\fR
+\fBputs "appdata is #{\fR\fIpool\fR\fB\&.appdata}"\fR
+.fi
+.if n \{\
+.RE
+.\}
+.sp
+Iterators also work as expected:
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+\fBfor\fR \fIsolvable\fR \fBin\fR \fIpool\fR\fB\&.solvables_iter() do \&.\&.\&.\fR
+.fi
+.if n \{\
+.RE
+.\}
+.sp
+Arrays are passed and returned as array objects:
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+\fIjobs\fR \fB= []\fR
+\fIproblems\fR \fB=\fR \fIsolver\fR\fB\&.solve(\fR\fIjobs\fR\fB)\fR
+.fi
+.if n \{\
+.RE
+.\}
+.sp
+Most classes define a to_s method, so objects can be easily stringified\&. Many also define an inspect() method\&.
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+\fBputs\fR \fIdep\fR
+\fBputs\fR \fIrepo\fR\fB\&.inspect\fR
+.fi
+.if n \{\
+.RE
+.\}
+.sp
+Constants live in the namespace of the class they belong to:
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+\fIpool\fR\fB\&.set_flag(Solv::Pool::POOL_FLAG_OBSOLETEUSESCOLORS, 1)\fR;
+.fi
+.if n \{\
+.RE
+.\}
+.sp
+Note that boolean methods have an added trailing \(lq?\(rq, to be consistent with other ruby modules:
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+\fBputs "empty\fR \fIrepo\fR\fB" if\fR \fIrepo\fR\fB\&.isempty?\fR
+.fi
+.if n \{\
+.RE
+.\}
+.SH "THE SOLV CLASS"
+.sp
+This is the main namespace of the library, you cannot create objects of this type but it contains some useful constants\&.
+.SS "CONSTANTS"
+.sp
+Relational flag constants, the first three can be or\-ed together
+.PP
+\fBREL_LT\fR
+.RS 4
+the \(lqless than\(rq bit
+.RE
+.PP
+\fBREL_EQ\fR
+.RS 4
+the \(lqequals to\(rq bit
+.RE
+.PP
+\fBREL_GT\fR
+.RS 4
+the \(lqgreater then\(rq bit
+.RE
+.PP
+\fBREL_ARCH\fR
+.RS 4
+used for relations that describe an extra architecture filter, the version part of the relation is interpreted as architecture\&.
+.RE
+.sp
+Special Solvable Ids
+.PP
+\fBSOLVID_META\fR
+.RS 4
+Access the meta section of a repository or repodata area\&. This is like an extra Solvable that has the Id SOLVID_META\&.
+.RE
+.PP
+\fBSOLVID_POS\fR
+.RS 4
+Use the data position stored inside of the pool instead of accessing some solvable by Id\&. The bindings have the Datapos objects as an abstraction mechanism, so you do not need this constant\&.
+.RE
+.sp
+Constant string Ids
+.PP
+\fBID_NULL\fR
+.RS 4
+Always zero
+.RE
+.PP
+\fBID_EMPTY\fR
+.RS 4
+Always one, describes the empty string
+.RE
+.PP
+\fBSOLVABLE_NAME\fR
+.RS 4
+The keyname Id of the name of the solvable\&.
+.RE
+.PP
+\fB\&...\fR
+.RS 4
+see the libsolv\-constantids manpage for a list of fixed Ids\&.
+.RE
+.SH "THE POOL CLASS"
 .sp
 The pool is libsolv\(cqs central resource manager\&. A pool consists of Solvables, Repositories, Dependencies, each indexed by Ids\&.
 .SS "CLASS METHODS"
@@ -58,7 +398,7 @@ Create a new pool instance\&. In most cases you just need one pool\&.
 .\}
 .nf
 \fBvoid *appdata;\fR                  /* read/write */
-\fI$pool\fR\fB\->{\*(Aqappdata\*(Aq}\fR
+\fI$pool\fR\fB\->{appdata}\fR
 \fIpool\fR\fB\&.appdata\fR
 \fIpool\fR\fB\&.appdata\fR
 .fi
@@ -73,7 +413,7 @@ Application specific data that may be used in any way by the code using the pool
 .\}
 .nf
 \fBSolvable solvables[];\fR           /* read only */
-my \fI$solvable\fR \fB=\fR \fI$pool\fR\fB\->{\*(Aqsolvables\*(Aq}\->[\fR\fI$solvid\fR\fB]\fR;
+my \fI$solvable\fR \fB=\fR \fI$pool\fR\fB\->{solvables}\->[\fR\fI$solvid\fR\fB]\fR;
 \fIsolvable\fR \fB=\fR \fIpool\fR\fB\&.solvables[\fR\fIsolvid\fR\fB]\fR
 \fIsolvable\fR \fB=\fR \fIpool\fR\fB\&.solvables[\fR\fIsolvid\fR\fB]\fR
 .fi
@@ -88,7 +428,7 @@ Look up a Solvable by its id\&.
 .\}
 .nf
 \fBRepo repos[];\fR                   /* read only */
-my \fI$repo\fR \fB=\fR \fI$pool\fR\fB\->{\*(Aqrepos\*(Aq}\->[\fR\fI$repoid\fR\fB]\fR;
+my \fI$repo\fR \fB=\fR \fI$pool\fR\fB\->{repos}\->[\fR\fI$repoid\fR\fB]\fR;
 \fIrepo\fR \fB=\fR \fIpool\fR\fB\&.repos[\fR\fIrepoid\fR\fB]\fR
 \fIrepo\fR \fB=\fR \fIpool\fR\fB\&.repos[\fR\fIrepoid\fR\fB]\fR
 .fi
@@ -103,7 +443,7 @@ Look up a Repository by its id\&.
 .\}
 .nf
 \fBRepo *installed;\fR                /* read/write */
-\fI$pool\fR\fB\->{\*(Aqinstalled\*(Aq} =\fR \fI$repo\fR;
+\fI$pool\fR\fB\->{installed} =\fR \fI$repo\fR;
 \fIpool\fR\fB\&.installed =\fR \fIrepo\fR
 \fIpool\fR\fB\&.installed =\fR \fIrepo\fR
 .fi
@@ -112,6 +452,21 @@ Look up a Repository by its id\&.
 .\}
 .sp
 Define which repository contains all the installed packages\&.
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+\fBconst char *errstr;\fR             /* read only */
+my \fI$err\fR \fB=\fR \fI$pool\fR\fB\->{errstr}\fR;
+\fIerr\fR \fB=\fR \fIpool\fR\fB\&.errstr\fR
+\fIerr\fR \fB=\fR \fIpool\fR\fB\&.errstr\fR
+.fi
+.if n \{\
+.RE
+.\}
+.sp
+Return the last error string that was stored in the pool\&.
 .SS "CONSTANTS"
 .PP
 \fBPOOL_FLAG_PROMOTEEPOCH\fR
@@ -121,7 +476,7 @@ Promote the epoch of the providing dependency to the requesting dependency if it
 .PP
 \fBPOOL_FLAG_FORBIDSELFCONFLICTS\fR
 .RS 4
-Disallow the installation of packages that conflict with themselfs\&. Debian always allowd self\-conflicting packages, rpm used to forbid them but switched to also allowing them recently\&.
+Disallow the installation of packages that conflict with themselves\&. Debian always allows self\-conflicting packages, rpm used to forbid them but switched to also allowing them recently\&.
 .RE
 .PP
 \fBPOOL_FLAG_OBSOLETEUSESPROVIDES\fR
@@ -136,7 +491,7 @@ An implicit obsoletes is the internal mechanism to remove the old package on an
 .PP
 \fBPOOL_FLAG_OBSOLETEUSESCOLORS\fR
 .RS 4
-Rpm\(cqs multilib implementation (used in RedHat and Fedora) distinguishes between 32bit and 64bit packages (the terminology is that they have a different color)\&. If obsolteusescolors is set, packages with different colors will not obsolete each other\&.
+Rpm\(cqs multilib implementation (used in RedHat and Fedora) distinguishes between 32bit and 64bit packages (the terminology is that they have a different color)\&. If obsoleteusescolors is set, packages with different colors will not obsolete each other\&.
 .RE
 .PP
 \fBPOOL_FLAG_IMPLICITOBSOLETEUSESCOLORS\fR
@@ -146,7 +501,7 @@ Same as POOL_FLAG_OBSOLETEUSESCOLORS, but used to find out if packages of the sa
 .PP
 \fBPOOL_FLAG_NOINSTALLEDOBSOLETES\fR
 .RS 4
-New versions of rpm consider the obsoletes of installed packages when checking for dependency, thus you may not install a package that is obsoleted by some other installed package, unless you also deinstall the other package\&.
+New versions of rpm consider the obsoletes of installed packages when checking for dependency, thus you may not install a package that is obsoleted by some other installed package, unless you also erase the other package\&.
 .RE
 .PP
 \fBPOOL_FLAG_HAVEDISTEPOCH\fR
@@ -270,7 +625,7 @@ Set the architecture for your system\&. The architecture is used to determine wh
 .RS 4
 .\}
 .nf
-\fBRepo *add_repo(const char *\fR\fIname\fR\fB)\fR
+\fBRepo add_repo(const char *\fR\fIname\fR\fB)\fR
 \fI$repo\fR \fB=\fR \fI$pool\fR\fB\->add_repo(\fR\fI$name\fR\fB)\fR;
 \fIrepo\fR \fB=\fR \fIpool\fR\fB\&.add_repo(\fR\fIname\fR\fB)\fR
 \fIrepo\fR \fB=\fR \fIpool\fR\fB\&.add_repo(\fR\fIname\fR\fB)\fR
@@ -279,13 +634,13 @@ Set the architecture for your system\&. The architecture is used to determine wh
 .RE
 .\}
 .sp
-Add a Repository with the specified name to the pool\&. The reposiory is empty on creation, use the repository methods to populate it with packages\&.
+Add a Repository with the specified name to the pool\&. The repository is empty on creation, use the repository methods to populate it with packages\&.
 .sp
 .if n \{\
 .RS 4
 .\}
 .nf
-\fBRepoiterator *repos_iter()\fR
+\fBRepoiterator repos_iter()\fR
 \fBfor my\fR \fI$repo\fR \fB(\fR\fI@\fR\fB{\fR\fI$pool\fR\fB\->repos_iter()})\fR
 \fBfor\fR \fIrepo\fR \fBin\fR \fIpool\fR\fB\&.repos_iter():\fR
 \fBfor\fR \fIrepo\fR \fBin\fR \fIpool\fR\fB\&.repos_iter()\fR
@@ -300,7 +655,7 @@ Iterate over the existing repositories\&.
 .RS 4
 .\}
 .nf
-\fBSolvableiterator *solvables_iter()\fR
+\fBSolvableiterator solvables_iter()\fR
 \fBfor my\fR \fI$solvable\fR \fB(\fR\fI@\fR\fB{\fR\fI$pool\fR\fB\->solvables_iter()})\fR
 \fBfor\fR \fIsolvable\fR \fBin\fR \fIpool\fR\fB\&.solvables_iter():\fR
 \fBfor\fR \fIsolvable\fR \fBin\fR \fIpool\fR\fB\&.solvables_iter()\fR
@@ -315,7 +670,7 @@ Iterate over the existing solvables\&.
 .RS 4
 .\}
 .nf
-\fBDep *Dep(const char *\fR\fIstr\fR\fB, bool\fR \fIcreate\fR\fB=1)\fR
+\fBDep Dep(const char *\fR\fIstr\fR\fB, bool\fR \fIcreate\fR \fB= 1)\fR
 my \fI$dep\fR \fB=\fR \fI$pool\fR\fB\->Dep(\fR\fI$string\fR\fB)\fR;
 \fIdep\fR \fB=\fR \fIpool\fR\fB\&.Dep(\fR\fIstring\fR\fB)\fR
 \fIdep\fR \fB=\fR \fIpool\fR\fB\&.Dep(\fR\fIstring\fR\fB)\fR
@@ -343,7 +698,7 @@ Create an object describing a string or dependency\&. If the string is currently
 .RS 4
 .\}
 .nf
-\fBQueue addfileprovides_queue()\fR
+\fBId *addfileprovides_queue()\fR
 my \fI@ids\fR \fB=\fR \fI$pool\fR\fB\->addfileprovides_queue()\fR;
 \fIids\fR \fB=\fR \fIpool\fR\fB\&.addfileprovides_queue()\fR
 \fIids\fR \fB=\fR \fIpool\fR\fB\&.addfileprovides_queue()\fR
@@ -352,7 +707,7 @@ my \fI@ids\fR \fB=\fR \fI$pool\fR\fB\->addfileprovides_queue()\fR;
 .RE
 .\}
 .sp
-Some package managers like rpm allow dependencies on files contained in other packages\&. To allow libsolv to deal with those dependencies in an efficient way, you need to call the addfileprovides method after creating and reading all repositories\&. This method will scan all dependency for file names and than scan all packages for matching files\&. If a filename has been matched, it will be added to the provides list of the corresponding package\&. The addfileprovides_queue variant works the same way but returns an array containing all file dependencies\&. This information can be stored with the repository to speed up the next usage of the repository\&.
+Some package managers like rpm allow dependencies on files contained in other packages\&. To allow libsolv to deal with those dependencies in an efficient way, you need to call the addfileprovides method after creating and reading all repositories\&. This method will scan all dependency for file names and than scan all packages for matching files\&. If a filename has been matched, it will be added to the provides list of the corresponding package\&. The addfileprovides_queue variant works the same way but returns an array containing all file dependencies\&. This information can be stored in the meta section of the repositories to speed up the next time the repository is loaded and addfileprovides is called\&.
 .sp
 .if n \{\
 .RS 4
@@ -367,13 +722,13 @@ Some package managers like rpm allow dependencies on files contained in other pa
 .RE
 .\}
 .sp
-Create the internal \(lqwhatprovides\(rq hash over all of the provides of all packages\&. This method must be called before doing any lookups on provides\&. It\(cqs encuraged to do it right after all repos are set up, usually right after the call to addfileprovides()\&.
+Create the internal \(lqwhatprovides\(rq hash over all of the provides of all packages\&. This method must be called before doing any lookups on provides\&. It\(cqs encouraged to do it right after all repos are set up, usually right after the call to addfileprovides()\&.
 .sp
 .if n \{\
 .RS 4
 .\}
 .nf
-\fBQueue whatprovides(DepId\fR \fIdep\fR\fB)\fR
+\fBSolvable *whatprovides(DepId\fR \fIdep\fR\fB)\fR
 my \fI@solvables\fR \fB=\fR \fI$pool\fR\fB\->whatprovides(\fR\fI$dep\fR\fB)\fR;
 \fIsolvables\fR \fB=\fR \fIpool\fR\fB\&.whatprovides(\fR\fIdep\fR\fB)\fR
 \fIsolvables\fR \fB=\fR \fIpool\fR\fB\&.whatprovides(\fR\fIdep\fR\fB)\fR
@@ -388,7 +743,7 @@ Return all solvables that provide the specified dependency\&. You can use either
 .RS 4
 .\}
 .nf
-\fBQueue matchprovidingids(const char *\fR\fImatch\fR\fB, int\fR \fIflags\fR\fB)\fR
+\fBId *matchprovidingids(const char *\fR\fImatch\fR\fB, int\fR \fIflags\fR\fB)\fR
 my \fI@ids\fR \fB=\fR \fI$pool\fR\fB\->matchprovidingids(\fR\fI$match\fR\fB,\fR \fI$flags\fR\fB)\fR;
 \fIids\fR \fB=\fR \fIpool\fR\fB\&.matchprovidingids(\fR\fImatch\fR\fB,\fR \fIflags\fR\fB)\fR
 \fIids\fR \fB=\fR \fIpool\fR\fB\&.matchprovidingids(\fR\fImatch\fR\fB,\fR \fIflags\fR\fB)\fR
@@ -403,7 +758,7 @@ Search the names of all provides and return the ones matching the specified stri
 .RS 4
 .\}
 .nf
-\fBId towhatprovides(Queue\fR \fIids\fR\fB)\fR
+\fBId towhatprovides(Id *\fR\fIids\fR\fB)\fR
 my \fI$offset\fR \fB=\fR \fI$pool\fR\fB\->towhatprovides(\e\fR\fI@ids\fR\fB)\fR;
 \fIoffset\fR \fB=\fR \fIpool\fR\fB\&.towhatprovides(\fR\fIids\fR\fB)\fR
 \fIoffset\fR \fB=\fR \fIpool\fR\fB\&.towhatprovides(\fR\fIids\fR\fB)\fR
@@ -427,13 +782,13 @@ my \fI$bool\fR \fB=\fR \fI$pool\fR\fB\->isknownarch(\fR\fI$id\fR\fB)\fR;
 .RE
 .\}
 .sp
-Return true if the specified Id describs a known architecture\&.
+Return true if the specified Id describes a known architecture\&.
 .sp
 .if n \{\
 .RS 4
 .\}
 .nf
-\fBSolver *Solver()\fR
+\fBSolver Solver()\fR
 my \fI$solver\fR \fB=\fR \fI$pool\fR\fB\->Solver()\fR;
 \fIsolver\fR \fB=\fR \fIpool\fR\fB\&.Solver()\fR
 \fIsolver\fR \fB=\fR \fIpool\fR\fB\&.Solver()\fR
@@ -448,7 +803,7 @@ Create a new solver object\&.
 .RS 4
 .\}
 .nf
-\fBSolver *Job(int\fR \fIhow\fR\fB, Id\fR \fIwhat\fR\fB)\fR
+\fBJob Job(int\fR \fIhow\fR\fB, Id\fR \fIwhat\fR\fB)\fR
 my \fI$job\fR \fB=\fR \fI$pool\fR\fB\->Job(\fR\fI$how\fR\fB,\fR \fI$what\fR\fB)\fR;
 \fIjob\fR \fB=\fR \fIpool\fR\fB\&.Job(\fR\fIhow\fR\fB,\fR \fIwhat\fR\fB)\fR
 \fIjob\fR \fB=\fR \fIpool\fR\fB\&.Job(\fR\fIhow\fR\fB,\fR \fIwhat\fR\fB)\fR
@@ -463,7 +818,7 @@ Create a new Job object\&. Kind of low level, in most cases you would use a Sele
 .RS 4
 .\}
 .nf
-\fBSelection *Selection()\fR
+\fBSelection Selection()\fR
 my \fI$sel\fR \fB=\fR \fI$pool\fR\fB\->Selection()\fR;
 \fIsel\fR \fB=\fR \fIpool\fR\fB\&.Selection()\fR
 \fIsel\fR \fB=\fR \fIpool\fR\fB\&.Selection()\fR
@@ -478,7 +833,7 @@ Create an empty selection\&. Useful as a starting point for merging other select
 .RS 4
 .\}
 .nf
-\fBSelection *Selection_all()\fR
+\fBSelection Selection_all()\fR
 my \fI$sel\fR \fB=\fR \fI$pool\fR\fB\->Selection_all()\fR;
 \fIsel\fR \fB=\fR \fIpool\fR\fB\&.Selection_all()\fR
 \fIsel\fR \fB=\fR \fIpool\fR\fB\&.Selection_all()\fR
@@ -493,7 +848,7 @@ Create a selection containing all packages\&. Useful as starting point for inter
 .RS 4
 .\}
 .nf
-\fBSelection *select(const char *\fR\fIname\fR\fB, int\fR \fIflags\fR\fB)\fR
+\fBSelection select(const char *\fR\fIname\fR\fB, int\fR \fIflags\fR\fB)\fR
 my \fI$sel\fR \fB=\fR \fI$pool\fR\fB\->select(\fR\fI$name\fR\fB,\fR \fI$flags\fR\fB)\fR;
 \fIsel\fR \fB=\fR \fIpool\fR\fB\&.select(\fR\fIname\fR\fB,\fR \fIflags\fR\fB)\fR
 \fIsel\fR \fB=\fR \fIpool\fR\fB\&.select(\fR\fIname\fR\fB,\fR \fIflags\fR\fB)\fR
@@ -521,7 +876,7 @@ Create a selection by matching packages against the specified string\&. See the
 .RS 4
 .\}
 .nf
-\fBJobs *getpooljobs()\fR
+\fBJob *getpooljobs()\fR
 \fI@jobs\fR \fB=\fR \fI$pool\fR\fB\->getpooljobs()\fR;
 \fIjobs\fR \fB=\fR \fIpool\fR\fB\&.getpooljobs()\fR
 \fIjobs\fR \fB=\fR \fIpool\fR\fB\&.getpooljobs()\fR
@@ -548,7 +903,7 @@ Get/Set fixed jobs stored in the pool\&. Those jobs are automatically appended t
 Set the callback function called when repository metadata needs to be loaded on demand\&. To make use of this feature, you need to create repodata stubs that tell the library which data is available but not loaded\&. If later on the data needs to be accessed, the callback function is called with a repodata argument\&. You can then load the data (maybe fetching it first from an remote server)\&. The callback should return true if the data has been made available\&.
 .SS "DATA RETRIEVAL METHODS"
 .sp
-In the following functions, the \fIkeyname\fR argument describes what to retrive\&. For the standard cases you can use the available Id constants\&. For example,
+In the following functions, the \fIkeyname\fR argument describes what to retrieve\&. For the standard cases you can use the available Id constants\&. For example,
 .sp
 .if n \{\
 .RS 4
@@ -620,7 +975,7 @@ my \fI$bool\fR \fB=\fR \fI$pool\fR\fB\->lookup_void(\fR\fI$solvid\fR\fB,\fR \fI$
 .RS 4
 .\}
 .nf
-\fBQueue lookup_idarray(Id\fR \fIsolvid\fR\fB, Id\fR \fIkeyname\fR\fB)\fR
+\fBId *lookup_idarray(Id\fR \fIsolvid\fR\fB, Id\fR \fIkeyname\fR\fB)\fR
 my \fI@ids\fR \fB=\fR \fI$pool\fR\fB\->lookup_idarray(\fR\fI$solvid\fR\fB,\fR \fI$keyname\fR\fB)\fR;
 \fIids\fR \fB=\fR \fIpool\fR\fB\&.lookup_idarray(\fR\fIsolvid\fR\fB,\fR \fIkeyname\fR\fB)\fR
 \fIids\fR \fB=\fR \fIpool\fR\fB\&.lookup_idarray(\fR\fIsolvid\fR\fB,\fR \fIkeyname\fR\fB)\fR
@@ -633,7 +988,7 @@ my \fI@ids\fR \fB=\fR \fI$pool\fR\fB\->lookup_idarray(\fR\fI$solvid\fR\fB,\fR \f
 .RS 4
 .\}
 .nf
-\fBChksum *lookup_checksum(Id\fR \fIsolvid\fR\fB, Id\fR \fIkeyname\fR\fB)\fR
+\fBChksum lookup_checksum(Id\fR \fIsolvid\fR\fB, Id\fR \fIkeyname\fR\fB)\fR
 my \fI$chksum\fR \fB=\fR \fI$pool\fR\fB\->lookup_checksum(\fR\fI$solvid\fR\fB,\fR \fI$keyname\fR\fB)\fR;
 \fIchksum\fR \fB=\fR \fIpool\fR\fB\&.lookup_checksum(\fR\fIsolvid\fR\fB,\fR \fIkeyname\fR\fB)\fR
 \fIchksum\fR \fB=\fR \fIpool\fR\fB\&.lookup_checksum(\fR\fIsolvid\fR\fB,\fR \fIkeyname\fR\fB)\fR
@@ -648,7 +1003,7 @@ Lookup functions\&. Return the data element stored in the specified solvable\&.
 .RS 4
 .\}
 .nf
-\fBDataiterator *Dataiterator(Id\fR \fIsolvid\fR\fB, Id\fR \fIkeyname\fR\fB, const char *\fR\fImatch\fR\fB, int\fR \fIflags\fR\fB)\fR
+\fBDataiterator Dataiterator(Id\fR \fIsolvid\fR\fB, Id\fR \fIkeyname\fR\fB, const char *\fR\fImatch\fR\fB, int\fR \fIflags\fR\fB)\fR
 my \fI$di\fR \fB=\fR \fI$pool\fR\fB\->Dataiterator(\fR\fI$solvid\fR\fB,\fR \fI$keyname\fR\fB,\fR \fI$match\fR\fB,\fR \fI$flags\fR\fB)\fR;
 \fIdi\fR \fB=\fR \fIpool\fR\fB\&.Dataiterator(\fR\fIsolvid\fR\fB,\fR \fIkeyname\fR\fB,\fR \fImatch\fR\fB,\fR \fIflags\fR\fB)\fR
 \fIdi\fR \fB=\fR \fIpool\fR\fB\&.Dataiterator(\fR\fIsolvid\fR\fB,\fR \fIkeyname\fR\fB,\fR \fImatch\fR\fB,\fR \fIflags\fR\fB)\fR
@@ -678,7 +1033,7 @@ The following methods deal with Ids, i\&.e\&. integers representing objects in t
 .RS 4
 .\}
 .nf
-\fBRepo *id2repo(Id\fR \fIid\fR\fB)\fR
+\fBRepo id2repo(Id\fR \fIid\fR\fB)\fR
 \fI$repo\fR \fB=\fR \fI$pool\fR\fB\->id2repo(\fR\fI$id\fR\fB)\fR;
 \fIrepo\fR \fB=\fR \fIpool\fR\fB\&.id2repo(\fR\fIid\fR\fB)\fR
 \fIrepo\fR \fB=\fR \fIpool\fR\fB\&.id2repo(\fR\fIid\fR\fB)\fR
@@ -693,7 +1048,7 @@ Lookup an existing Repository by id\&. You can also do this by using the \fBrepo
 .RS 4
 .\}
 .nf
-\fBSolvable *id2solvable(Id\fR \fIid\fR\fB)\fR
+\fBSolvable id2solvable(Id\fR \fIid\fR\fB)\fR
 \fI$solvable\fR \fB=\fR \fI$pool\fR\fB\->id2solvable(\fR\fI$id\fR\fB)\fR;
 \fIsolvable\fR \fB=\fR \fIpool\fR\fB\&.id2solvable(\fR\fIid\fR\fB)\fR
 \fIsolvable\fR \fB=\fR \fIpool\fR\fB\&.id2solvable(\fR\fIid\fR\fB)\fR
@@ -723,7 +1078,7 @@ Return a string describing the Solvable with the specified id\&. The string cons
 .RS 4
 .\}
 .nf
-\fBId str2id(const char *\fR\fIstr\fR\fB, bool\fR \fIcreate\fR\fB=1)\fR
+\fBId str2id(const char *\fR\fIstr\fR\fB, bool\fR \fIcreate\fR \fB= 1)\fR
 my \fI$id\fR \fB=\fR \fIpool\fR\fB\->str2id(\fR\fI$string\fR\fB)\fR;
 \fIid\fR \fB=\fR \fIpool\fR\fB\&.str2id(\fR\fIstring\fR\fB)\fR
 \fIid\fR \fB=\fR \fIpool\fR\fB\&.str2id(\fR\fIstring\fR\fB)\fR
@@ -751,7 +1106,7 @@ Convert a string into an Id and back\&. If the string is currently not in the po
 .RS 4
 .\}
 .nf
-\fBId rel2id(Id\fR \fIname\fR\fB, Id\fR \fIevr\fR\fB, int\fR \fIflags\fR\fB, bool\fR \fIcreate\fR\fB=1)\fR
+\fBId rel2id(Id\fR \fIname\fR\fB, Id\fR \fIevr\fR\fB, int\fR \fIflags\fR\fB, bool\fR \fIcreate\fR \fB= 1)\fR
 my \fI$id\fR \fB=\fR \fIpool\fR\fB\->rel2id(\fR\fI$nameid\fR\fB,\fR \fI$evrid\fR\fB,\fR \fI$flags\fR\fB)\fR;
 \fIid\fR \fB=\fR \fIpool\fR\fB\&.rel2id(\fR\fInameid\fR\fB,\fR \fIevrid\fR\fB,\fR \fIflags\fR\fB)\fR
 \fIid\fR \fB=\fR \fIpool\fR\fB\&.rel2id(\fR\fInameid\fR\fB,\fR \fIevrid\fR\fB,\fR \fIflags\fR\fB)\fR
@@ -780,7 +1135,7 @@ Thus, if you want a \(lq<=\(rq relation, you would use \fBREL_LT | REL_EQ\fR\&.
 .RS 4
 .\}
 .nf
-\fBId id2langid(Id\fR \fIid\fR\fB, const char *\fR\fIlang\fR\fB, bool\fR \fIcreate\fR\fB=1)\fR
+\fBId id2langid(Id\fR \fIid\fR\fB, const char *\fR\fIlang\fR\fB, bool\fR \fIcreate\fR \fB= 1)\fR
 my \fI$id\fR \fB=\fR \fI$pool\fR\fB\->id2langid(\fR\fI$id\fR\fB,\fR \fI$language\fR\fB)\fR;
 \fIid\fR \fB=\fR \fIpool\fR\fB\&.id2langid(\fR\fIid\fR\fB,\fR \fIlanguage\fR\fB)\fR
 \fIid\fR \fB=\fR \fIpool\fR\fB\&.id2langid(\fR\fIid\fR\fB,\fR \fIlanguage\fR\fB)\fR
@@ -815,7 +1170,7 @@ The dependency class is an object orientated way to work with strings and depend
 .\}
 .nf
 \fBPool *pool;\fR             /* read only */
-\fI$dep\fR\fB\->{\*(Aqpool\*(Aq}\fR
+\fI$dep\fR\fB\->{pool}\fR
 \fIdep\fR\fB\&.pool\fR
 \fIdep\fR\fB\&.pool\fR
 .fi
@@ -830,7 +1185,7 @@ Back reference to the pool this dependency belongs to\&.
 .\}
 .nf
 \fBId id;\fR          /* read only */
-\fI$dep\fR\fB\->{\*(Aqid\*(Aq}\fR
+\fI$dep\fR\fB\->{id}\fR
 \fIdep\fR\fB\&.id\fR
 \fIdep\fR\fB\&.id\fR
 .fi
@@ -845,7 +1200,7 @@ The id of this dependency\&.
 .RS 4
 .\}
 .nf
-\fBDep *Rel(int\fR \fIflags\fR\fB, DepId\fR \fIevrid\fR\fB, bool\fR \fIcreate\fR\fB=1)\fR
+\fBDep Rel(int\fR \fIflags\fR\fB, DepId\fR \fIevrid\fR\fB, bool\fR \fIcreate\fR \fB= 1)\fR
 my \fI$reldep\fR \fB=\fR \fI$dep\fR\fB\->Rel(\fR\fI$flags\fR\fB,\fR \fI$evrdep\fR\fB)\fR;
 \fIreldep\fR \fB=\fR \fIdep\fR\fB\&.Rel(\fR\fIflags\fR\fB,\fR \fIevrdep\fR\fB)\fR
 \fIreldep\fR \fB=\fR \fIdep\fR\fB\&.Rel(\fR\fIflags\fR\fB,\fR \fIevrdep\fR\fB)\fR
@@ -860,7 +1215,7 @@ Create a relational dependency from to string dependencies and a flags argument\
 .RS 4
 .\}
 .nf
-\fBSelection *Selection_name(int\fR \fIsetflags\fR \fB= 0)\fR
+\fBSelection Selection_name(int\fR \fIsetflags\fR \fB= 0)\fR
 my \fI$sel\fR \fB=\fR \fI$dep\fR\fB\->Selection_name()\fR;
 \fIsel\fR \fB=\fR \fIdep\fR\fB\&.Selection_name()\fR
 \fIsel\fR \fB=\fR \fIdep\fR\fB\&.Selection_name()\fR
@@ -875,7 +1230,7 @@ Create a Selection from a dependency\&. The selection consists of all packages t
 .RS 4
 .\}
 .nf
-\fBSelection *Selection_provides(int\fR \fIsetflags\fR \fB= 0)\fR
+\fBSelection Selection_provides(int\fR \fIsetflags\fR \fB= 0)\fR
 my \fI$sel\fR \fB=\fR \fI$dep\fR\fB\->Selection_provides()\fR;
 \fIsel\fR \fB=\fR \fIdep\fR\fB\&.Selection_provides()\fR
 \fIsel\fR \fB=\fR \fIdep\fR\fB\&.Selection_provides()\fR
@@ -906,7 +1261,7 @@ Return a string describing the dependency\&.
 .\}
 .nf
 \fB<stringification>\fR
-my \fI$str\fR \fB= "\fR\fI$dep\fR\fB"\fR;
+my \fI$str\fR \fB=\fR \fI$dep\fR\fB\->str\fR;
 \fIstr\fR \fB= str(\fR\fIdep\fR\fB)\fR
 \fIstr\fR \fB=\fR \fIdep\fR\fB\&.to_s\fR
 .fi
@@ -932,7 +1287,7 @@ Same as calling the str() method\&.
 The dependencies are equal if they are part of the same pool and have the same ids\&.
 .SH "THE REPOSITORY CLASS"
 .sp
-A Repository describes a group of packages, normally comming from the same source\&. Repositories are created by the Pool\(cqs add_repo() method\&.
+A Repository describes a group of packages, normally coming from the same source\&. Repositories are created by the Pool\(cqs add_repo() method\&.
 .SS "ATTRIBUTES"
 .sp
 .if n \{\
@@ -940,7 +1295,7 @@ A Repository describes a group of packages, normally comming from the same sourc
 .\}
 .nf
 \fBPool *pool;\fR                     /* read only */
-\fI$repo\fR\fB\->{\*(Aqpool\*(Aq}\fR
+\fI$repo\fR\fB\->{pool}\fR
 \fIrepo\fR\fB\&.pool\fR
 \fIrepo\fR\fB\&.pool\fR
 .fi
@@ -955,7 +1310,7 @@ Back reference to the pool this dependency belongs to\&.
 .\}
 .nf
 \fBId id;\fR                          /* read only */
-\fI$repo\fR\fB\->{\*(Aqid\*(Aq}\fR
+\fI$repo\fR\fB\->{id}\fR
 \fIrepo\fR\fB\&.id\fR
 \fIrepo\fR\fB\&.id\fR
 .fi
@@ -970,7 +1325,7 @@ The id of the repository\&.
 .\}
 .nf
 \fBconst char *name;\fR               /* read/write */
-\fI$repo\fR\fB\->{\*(Aqname\*(Aq}\fR
+\fI$repo\fR\fB\->{name}\fR
 \fIrepo\fR\fB\&.name\fR
 \fIrepo\fR\fB\&.name\fR
 .fi
@@ -984,8 +1339,8 @@ The repositories name\&. To libsolv, the name is just a string with no specific
 .RS 4
 .\}
 .nf
-\fBint prioprity;\fR                  /* read/write */
-\fI$repo\fR\fB\->{\*(Aqpriority\*(Aq}\fR
+\fBint priority;\fR                   /* read/write */
+\fI$repo\fR\fB\->{priority}\fR
 \fIrepo\fR\fB\&.priority\fR
 \fIrepo\fR\fB\&.priority\fR
 .fi
@@ -999,8 +1354,8 @@ The priority of the repository\&. A higher number means that packages of this re
 .RS 4
 .\}
 .nf
-\fBint subprioprity;\fR               /* read/write */
-\fI$repo\fR\fB\->{\*(Aqsubpriority\*(Aq}\fR
+\fBint subpriority;\fR                /* read/write */
+\fI$repo\fR\fB\->{subpriority}\fR
 \fIrepo\fR\fB\&.subpriority\fR
 \fIrepo\fR\fB\&.subpriority\fR
 .fi
@@ -1015,7 +1370,7 @@ The sub\-priority of the repository\&. This value is compared when the prioritie
 .\}
 .nf
 \fBint nsolvables;\fR                 /* read only */
-\fI$repo\fR\fB\->{\*(Aqnsolvables\*(Aq}\fR
+\fI$repo\fR\fB\->{nsolvables}\fR
 \fIrepo\fR\fB\&.nsolvables\fR
 \fIrepo\fR\fB\&.nsolvables\fR
 .fi
@@ -1030,7 +1385,7 @@ The number of solvables in this repository\&.
 .\}
 .nf
 \fBvoid *appdata;\fR                  /* read/write */
-\fI$repo\fR\fB\->{\*(Aqappdata\*(Aq}\fR
+\fI$repo\fR\fB\->{appdata}\fR
 \fIrepo\fR\fB\&.appdata\fR
 \fIrepo\fR\fB\&.appdata\fR
 .fi
@@ -1045,7 +1400,7 @@ Application specific data that may be used in any way by the code using the repo
 .\}
 .nf
 \fBDatapos *meta;\fR                  /* read only */
-\fI$repo\fR\fB\->{\*(Aqmeta\*(Aq}\fR
+\fI$repo\fR\fB\->{meta}\fR
 \fIrepo\fR\fB\&.meta\fR
 \fIrepo\fR\fB\&.meta\fR
 .fi
@@ -1058,7 +1413,7 @@ Return a Datapos object of the repodata\(cqs metadata\&. You can use the lookup
 .PP
 \fBREPO_REUSE_REPODATA\fR
 .RS 4
-Reuse the last repository data aera (\(lqrepodata\(rq) instead of creating a new one\&.
+Reuse the last repository data area (\(lqrepodata\(rq) instead of creating a new one\&.
 .RE
 .PP
 \fBREPO_NO_INTERNALIZE\fR
@@ -1181,7 +1536,7 @@ Write a repo as a \(lqsolv\(rq file\&. These files can be read very fast and thu
 .RS 4
 .\}
 .nf
-\fBSolvableiterator *solvables_iter()\fR
+\fBSolvableiterator solvables_iter()\fR
 \fBfor my\fR \fI$solvable\fR \fB(\fR\fI@\fR\fB{\fR\fI$repo\fR\fB\->solvables_iter()})\fR
 \fBfor\fR \fIsolvable\fR \fBin\fR \fIrepo\fR\fB\&.solvables_iter():\fR
 \fBfor\fR \fIsolvable\fR \fBin\fR \fIrepo\fR\fB\&.solvables_iter()\fR
@@ -1196,7 +1551,7 @@ Iterate over all solvables in a repository\&.
 .RS 4
 .\}
 .nf
-\fBRepodata *add_repodata(int\fR \fIflags\fR \fB= 0)\fR
+\fBRepodata add_repodata(int\fR \fIflags\fR \fB= 0)\fR
 my \fI$repodata\fR \fB=\fR \fI$repo\fR\fB\->add_repodata()\fR;
 \fIrepodata\fR \fB=\fR \fIrepo\fR\fB\&.add_repodata()\fR
 \fIrepodata\fR \fB=\fR \fIrepo\fR\fB\&.add_repodata()\fR
@@ -1241,7 +1596,7 @@ Return true if the solvables of this repository are all in a single block with n
 .RS 4
 .\}
 .nf
-\fBRepodata *first_repodata()\fR
+\fBRepodata first_repodata()\fR
 my \fI$repodata\fR \fB=\fR \fI$repo\fR\fB\->first_repodata()\fR;
 \fIrepodata\fR \fB=\fR \fIrepo\fR\fB\&.first_repodata()\fR
 \fIrepodata\fR \fB=\fR \fIrepo\fR\fB\&.first_repodata()\fR
@@ -1250,13 +1605,13 @@ my \fI$repodata\fR \fB=\fR \fI$repo\fR\fB\->first_repodata()\fR;
 .RE
 .\}
 .sp
-Checks if all repodatas but the first repodata are extensions, and return the first repodata if this is the case\&. Useful if you want to do a store/retrive sequence on the repository to reduce the memory using and enable paging, as this does not work if the rpository contains multiple non\-extension repodata areas\&.
+Checks if all repodatas but the first repodata are extensions, and return the first repodata if this is the case\&. Useful if you want to do a store/retrieve sequence on the repository to reduce the memory using and enable paging, as this does not work if the repository contains multiple non\-extension repodata areas\&.
 .sp
 .if n \{\
 .RS 4
 .\}
 .nf
-\fBSelection *Selection(int\fR \fIsetflags\fR \fB= 0)\fR
+\fBSelection Selection(int\fR \fIsetflags\fR \fB= 0)\fR
 my \fI$sel\fR \fB=\fR \fI$repo\fR\fB\->Selection()\fR;
 \fIsel\fR \fB=\fR \fIrepo\fR\fB\&.Selection()\fR
 \fIsel\fR \fB=\fR \fIrepo\fR\fB\&.Selection()\fR
@@ -1271,7 +1626,7 @@ Create a Selection consisting of all packages in the repository\&.
 .RS 4
 .\}
 .nf
-\fBDataiterator *Dataiterator(Id\fR \fIp\fR\fB, Id\fR \fIkey\fR\fB, const char *\fR\fImatch\fR\fB, int\fR \fIflags\fR\fB)\fR
+\fBDataiterator Dataiterator(Id\fR \fIp\fR\fB, Id\fR \fIkey\fR\fB, const char *\fR\fImatch\fR\fB, int\fR \fIflags\fR\fB)\fR
 my \fI$di\fR \fB=\fR \fI$repo\fR\fB\->Dataiterator(\fR\fI$solvid\fR\fB,\fR \fI$keyname\fR\fB,\fR \fI$match\fR\fB,\fR \fI$flags\fR\fB)\fR;
 \fIdi\fR \fB=\fR \fIrepo\fR\fB\&.Dataiterator(\fR\fIsolvid\fR\fB,\fR \fIkeyname\fR\fB,\fR \fImatch\fR\fB,\fR \fIflags\fR\fB)\fR
 \fIdi\fR \fB=\fR \fIrepo\fR\fB\&.Dataiterator(\fR\fIsolvid\fR\fB,\fR \fIkeyname\fR\fB,\fR \fImatch\fR\fB,\fR \fIflags\fR\fB)\fR
@@ -1299,7 +1654,7 @@ Iterate over the matching data elements in this repository\&. See the Dataiterat
 .\}
 .nf
 \fB<stringification>\fR
-my \fI$str\fR \fB= "\fR\fI$repo\fR\fB"\fR;
+my \fI$str\fR \fB=\fR \fI$repo\fR\fB\->str\fR;
 \fIstr\fR \fB= str(\fR\fIrepo\fR\fB)\fR
 \fIstr\fR \fB=\fR \fIrepo\fR\fB\&.to_s\fR
 .fi
@@ -1329,7 +1684,7 @@ Two repositories are equal if they belong to the same pool and have the same id\
 .RS 4
 .\}
 .nf
-\fBSolvable *add_solvable()\fR
+\fBSolvable add_solvable()\fR
 \fI$repo\fR\fB\->add_solvable()\fR;
 \fIrepo\fR\fB\&.add_solvable()\fR
 \fIrepo\fR\fB\&.add_solvable()\fR
@@ -1345,9 +1700,9 @@ Add a single empty solvable to the repository\&. Returns a Solvable object, see
 .\}
 .nf
 \fBbool add_solv(const char *\fR\fIname\fR\fB, int\fR \fIflags\fR \fB= 0)\fR
-\fI$repo\fR\fB\->add_solv(\fR\fI$name\fR\fB,\fR \fI$flags\fR\fB)\fR;
-\fIrepo\fR\fB\&.add_solv(\fR\fIname\fR\fB,\fR \fIflags\fR\fB)\fR
-\fIrepo\fR\fB\&.add_solv(\fR\fIname\fR\fB,\fR \fIflags\fR\fB)\fR
+\fI$repo\fR\fB\->add_solv(\fR\fI$name\fR\fB)\fR;
+\fIrepo\fR\fB\&.add_solv(\fR\fIname\fR\fB)\fR
+\fIrepo\fR\fB\&.add_solv(\fR\fIname\fR\fB)\fR
 .fi
 .if n \{\
 .RE
@@ -1358,9 +1713,9 @@ Add a single empty solvable to the repository\&. Returns a Solvable object, see
 .\}
 .nf
 \fBbool add_solv(FILE *\fR\fIfp\fR\fB, int\fR \fIflags\fR \fB= 0)\fR
-\fI$repo\fR\fB\->add_solv(\fR\fI$fp\fR\fB,\fR \fI$flags\fR\fB)\fR;
-\fIrepo\fR\fB\&.add_solv(\fR\fIfp\fR\fB,\fR \fIflags\fR\fB)\fR
-\fIrepo\fR\fB\&.add_solv(\fR\fIfp\fR\fB,\fR \fIflags\fR\fB)\fR
+\fI$repo\fR\fB\->add_solv(\fR\fI$fp\fR\fB)\fR;
+\fIrepo\fR\fB\&.add_solv(\fR\fIfp\fR\fB)\fR
+\fIrepo\fR\fB\&.add_solv(\fR\fIfp\fR\fB)\fR
 .fi
 .if n \{\
 .RE
@@ -1373,9 +1728,9 @@ Read a \(lqsolv\(rq file and add its contents to the repository\&. These files c
 .\}
 .nf
 \fBbool add_rpmdb(int\fR \fIflags\fR \fB= 0)\fR
-\fI$repo\fR\fB\->add_rpmdb(\fR\fI$flags\fR\fB)\fR;
-\fIrepo\fR\fB\&.add_rpmdb(\fR\fIflags\fR\fB)\fR
-\fIrepo\fR\fB\&.add_rpmdb(\fR\fIflags\fR\fB)\fR
+\fI$repo\fR\fB\->add_rpmdb()\fR;
+\fIrepo\fR\fB\&.add_rpmdb()\fR
+\fIrepo\fR\fB\&.add_rpmdb()\fR
 .fi
 .if n \{\
 .RE
@@ -1386,9 +1741,9 @@ Read a \(lqsolv\(rq file and add its contents to the repository\&. These files c
 .\}
 .nf
 \fBbool add_rpmdb_reffp(FILE *\fR\fIreffp\fR\fB, int\fR \fIflags\fR \fB= 0)\fR
-\fI$repo\fR\fB\->add_rpmdb_reffp(\fR\fI$reffp\fR\fB,\fR \fI$flags\fR\fB)\fR;
-\fIrepo\fR\fB\&.add_rpmdb_reffp(\fR\fI$reffp\fR\fB,\fR \fIflags\fR\fB)\fR
-\fIrepo\fR\fB\&.add_rpmdb_reffp(\fR\fI$reffp\fR\fB,\fR \fIflags\fR\fB)\fR
+\fI$repo\fR\fB\->add_rpmdb_reffp(\fR\fI$reffp\fR\fB)\fR;
+\fIrepo\fR\fB\&.add_rpmdb_reffp(\fR\fIreffp\fR\fB)\fR
+\fIrepo\fR\fB\&.add_rpmdb_reffp(\fR\fIreffp\fR\fB)\fR
 .fi
 .if n \{\
 .RE
@@ -1400,10 +1755,10 @@ Add the contents of the rpm database to the repository\&. If a solv file contain
 .RS 4
 .\}
 .nf
-\fBbool add_rpm(const char *\fR\fIname\fR\fB, int\fR \fIflags\fR \fB= 0)\fR
-\fI$repo\fR\fB\->add_rpm(\fR\fI$name\fR\fB,\fR \fI$flags\fR\fB)\fR;
-\fIrepo\fR\fB\&.add_rpm(\fR\fIname\fR\fB,\fR \fIflags\fR\fB)\fR
-\fIrepo\fR\fB\&.add_rpm(\fR\fIname\fR\fB,\fR \fIflags\fR\fB)\fR
+\fBSolvable add_rpm(const char *\fR\fIfilename\fR\fB, int\fR \fIflags\fR \fB= 0)\fR
+my \fI$solvable\fR \fB=\fR \fI$repo\fR\fB\->add_rpm(\fR\fI$filename\fR\fB)\fR;
+\fIsolvable\fR \fB=\fR \fIrepo\fR\fB\&.add_rpm(\fR\fIfilename\fR\fB)\fR
+\fIsolvable\fR \fB=\fR \fIrepo\fR\fB\&.add_rpm(\fR\fIfilename\fR\fB)\fR
 .fi
 .if n \{\
 .RE
@@ -1430,10 +1785,10 @@ Add all pubkeys contained in the rpm database to the repository\&. Note that new
 .RS 4
 .\}
 .nf
-\fBbool add_pubkey(const char *\fR\fIkeyfile\fR\fB, int\fR \fIflags\fR \fB= 0)\fR
-\fI$repo\fR\fB\->add_pubkey(\fR\fI$keyfile\fR\fB)\fR;
-\fIrepo\fR\fB\&.add_pubkey(\fR\fI$keyfile\fR\fB)\fR
-\fIrepo\fR\fB\&.add_pubkey(\fR\fI$keyfile\fR\fB)\fR
+\fBSolvable add_pubkey(const char *\fR\fIkeyfile\fR\fB, int\fR \fIflags\fR \fB= 0)\fR
+my \fI$solvable\fR \fB=\fR \fI$repo\fR\fB\->add_pubkey(\fR\fI$keyfile\fR\fB)\fR;
+\fIsolvable\fR \fB=\fR \fIrepo\fR\fB\&.add_pubkey(\fR\fIkeyfile\fR\fB)\fR
+\fIsolvable\fR \fB=\fR \fIrepo\fR\fB\&.add_pubkey(\fR\fIkeyfile\fR\fB)\fR
 .fi
 .if n \{\
 .RE
@@ -1446,9 +1801,9 @@ Add a pubkey from a file to the repository\&.
 .\}
 .nf
 \fBbool add_rpmmd(FILE *\fR\fIfp\fR\fB, const char *\fR\fIlanguage\fR\fB, int\fR \fIflags\fR \fB= 0)\fR
-\fI$repo\fR\fB\->add_rpmmd(\fR\fI$fp\fR\fB,\fR \fI$language\fR\fB)\fR;
-\fIrepo\fR\fB\&.add_rpmmd(\fR\fIfp\fR\fB,\fR \fIlanguage\fR\fB)\fR
-\fIrepo\fR\fB\&.add_rpmmd(\fR\fIfp\fR\fB,\fR \fIlanguage\fR\fB)\fR
+\fI$repo\fR\fB\->add_rpmmd(\fR\fI$fp\fR\fB,\fR \fIundef\fR\fB)\fR;
+\fIrepo\fR\fB\&.add_rpmmd(\fR\fIfp\fR\fB,\fR \fINone\fR\fB)\fR
+\fIrepo\fR\fB\&.add_rpmmd(\fR\fIfp\fR\fB,\fR \fInil\fR\fB)\fR
 .fi
 .if n \{\
 .RE
@@ -1535,10 +1890,10 @@ Add the contents of the debian repository metadata (the "packages" file) to the
 .RS 4
 .\}
 .nf
-\fBbool add_deb(const char *\fR\fIfilename\fR\fB, int\fR \fIflags\fR \fB= 0)\fR
-\fI$repo\fR\fB\->add_deb(\fR\fI$filename\fR\fB)\fR;
-\fIrepo\fR\fB\&.add_deb(\fR\fIfilename\fR\fB)\fR
-\fIrepo\fR\fB\&.add_deb(\fR\fIfilename\fR\fB)\fR
+\fBSolvable add_deb(const char *\fR\fIfilename\fR\fB, int\fR \fIflags\fR \fB= 0)\fR
+my \fI$solvable\fR \fB=\fR \fI$repo\fR\fB\->add_deb(\fR\fI$filename\fR\fB)\fR;
+\fIsolvable\fR \fB=\fR \fIrepo\fR\fB\&.add_deb(\fR\fIfilename\fR\fB)\fR
+\fIsolvable\fR \fB=\fR \fIrepo\fR\fB\&.add_deb(\fR\fIfilename\fR\fB)\fR
 .fi
 .if n \{\
 .RE
@@ -1552,8 +1907,8 @@ Add the metadata of a single deb package to the repository\&.
 .nf
 \fBbool add_mdk(FILE *\fR\fIfp\fR\fB, int\fR \fIflags\fR \fB= 0)\fR
 \fI$repo\fR\fB\->add_mdk(\fR\fI$fp\fR\fB)\fR;
-\fIrepo\fR\fB\&.add_mdk(\fR\fI$fp\fR\fB)\fR
-\fIrepo\fR\fB\&.add_mdk(\fR\fI$fp\fR\fB)\fR
+\fIrepo\fR\fB\&.add_mdk(\fR\fIfp\fR\fB)\fR
+\fIrepo\fR\fB\&.add_mdk(\fR\fIfp\fR\fB)\fR
 .fi
 .if n \{\
 .RE
@@ -1567,8 +1922,8 @@ Add the contents of the mageia/mandriva repository metadata (the "synthesis\&.hd
 .nf
 \fBbool add_mdk_info(FILE *\fR\fIfp\fR\fB, int\fR \fIflags\fR \fB= 0)\fR
 \fI$repo\fR\fB\->add_mdk(\fR\fI$fp\fR\fB)\fR;
-\fIrepo\fR\fB\&.add_mdk(\fR\fI$fp\fR\fB)\fR
-\fIrepo\fR\fB\&.add_mdk(\fR\fI$fp\fR\fB)\fR
+\fIrepo\fR\fB\&.add_mdk(\fR\fIfp\fR\fB)\fR
+\fIrepo\fR\fB\&.add_mdk(\fR\fIfp\fR\fB)\fR
 .fi
 .if n \{\
 .RE
@@ -1582,8 +1937,8 @@ Extend the packages from the synthesis file with the info\&.xml and files\&.xml
 .nf
 \fBbool add_arch_repo(FILE *\fR\fIfp\fR\fB, int\fR \fIflags\fR \fB= 0)\fR
 \fI$repo\fR\fB\->add_arch_repo(\fR\fI$fp\fR\fB)\fR;
-\fIrepo\fR\fB\&.add_arch_repo(\fR\fI$fp\fR\fB)\fR
-\fIrepo\fR\fB\&.add_arch_repo(\fR\fI$fp\fR\fB)\fR
+\fIrepo\fR\fB\&.add_arch_repo(\fR\fIfp\fR\fB)\fR
+\fIrepo\fR\fB\&.add_arch_repo(\fR\fIfp\fR\fB)\fR
 .fi
 .if n \{\
 .RE
@@ -1597,8 +1952,8 @@ Add the contents of the archlinux repository metadata (the "\&.db\&.tar" file) t
 .nf
 \fBbool add_arch_local(const char *\fR\fIdir\fR\fB, int\fR \fIflags\fR \fB= 0)\fR
 \fI$repo\fR\fB\->add_arch_local(\fR\fI$dir\fR\fB)\fR;
-\fIrepo\fR\fB\&.add_arch_local(\fR\fI$dir\fR\fB)\fR
-\fIrepo\fR\fB\&.add_arch_local(\fR\fI$dir\fR\fB)\fR
+\fIrepo\fR\fB\&.add_arch_local(\fR\fIdir\fR\fB)\fR
+\fIrepo\fR\fB\&.add_arch_local(\fR\fIdir\fR\fB)\fR
 .fi
 .if n \{\
 .RE
@@ -1660,7 +2015,7 @@ A solvable describes all the information of one package\&. Each solvable belongs
 .\}
 .nf
 \fBRepo *repo;\fR                     /* read only */
-\fI$solvable\fR\fB\->{\*(Aqrepo\*(Aq}\fR
+\fI$solvable\fR\fB\->{repo}\fR
 \fIsolvable\fR\fB\&.repo\fR
 \fIsolvable\fR\fB\&.repo\fR
 .fi
@@ -1675,7 +2030,7 @@ The repository this solvable belongs to\&.
 .\}
 .nf
 \fBPool *pool;\fR                     /* read only */
-\fI$solvable\fR\fB\->{\*(Aqpool\*(Aq}\fR
+\fI$solvable\fR\fB\->{pool}\fR
 \fIsolvable\fR\fB\&.pool\fR
 \fIsolvable\fR\fB\&.pool\fR
 .fi
@@ -1690,7 +2045,7 @@ The pool this solvable belongs to, same as the pool of the repo\&.
 .\}
 .nf
 \fBId id;\fR                          /* read only */
-\fI$solvable\fR\fB\->{\*(Aqid\*(Aq}\fR
+\fI$solvable\fR\fB\->{id}\fR
 \fIsolvable\fR\fB\&.id\fR
 \fIsolvable\fR\fB\&.id\fR
 .fi
@@ -1705,7 +2060,7 @@ The specific id of the solvable\&.
 .\}
 .nf
 \fBchar *name;\fR                     /* read/write */
-\fI$solvable\fR\fB\->{\*(Aqname\*(Aq}\fR
+\fI$solvable\fR\fB\->{name}\fR
 \fIsolvable\fR\fB\&.name\fR
 \fIsolvable\fR\fB\&.name\fR
 .fi
@@ -1718,7 +2073,7 @@ The specific id of the solvable\&.
 .\}
 .nf
 \fBchar *evr;\fR                      /* read/write */
-\fI$solvable\fR\fB\->{\*(Aqevr\*(Aq}\fR
+\fI$solvable\fR\fB\->{evr}\fR
 \fIsolvable\fR\fB\&.evr\fR
 \fIsolvable\fR\fB\&.evr\fR
 .fi
@@ -1731,7 +2086,7 @@ The specific id of the solvable\&.
 .\}
 .nf
 \fBchar *arch;\fR                     /* read/write */
-\fI$solvable\fR\fB\->{\*(Aqarch\*(Aq}\fR
+\fI$solvable\fR\fB\->{arch}\fR
 \fIsolvable\fR\fB\&.arch\fR
 \fIsolvable\fR\fB\&.arch\fR
 .fi
@@ -1744,7 +2099,7 @@ The specific id of the solvable\&.
 .\}
 .nf
 \fBchar *vendor;\fR                   /* read/write */
-\fI$solvable\fR\fB\->{\*(Aqvendor\*(Aq}\fR
+\fI$solvable\fR\fB\->{vendor}\fR
 \fIsolvable\fR\fB\&.vendor\fR
 \fIsolvable\fR\fB\&.vendor\fR
 .fi
@@ -1759,7 +2114,7 @@ Easy access to often used attributes of solvables\&. They are internally stored
 .\}
 .nf
 \fBId nameid;\fR                      /* read/write */
-\fI$solvable\fR\fB\->{\*(Aqnameid\*(Aq}\fR
+\fI$solvable\fR\fB\->{nameid}\fR
 \fIsolvable\fR\fB\&.nameid\fR
 \fIsolvable\fR\fB\&.nameid\fR
 .fi
@@ -1772,7 +2127,7 @@ Easy access to often used attributes of solvables\&. They are internally stored
 .\}
 .nf
 \fBId evrid;\fR                       /* read/write */
-\fI$solvable\fR\fB\->{\*(Aqevrid\*(Aq}\fR
+\fI$solvable\fR\fB\->{evrid}\fR
 \fIsolvable\fR\fB\&.evrid\fR
 \fIsolvable\fR\fB\&.evrid\fR
 .fi
@@ -1785,7 +2140,7 @@ Easy access to often used attributes of solvables\&. They are internally stored
 .\}
 .nf
 \fBId archid;\fR                      /* read/write */
-\fI$solvable\fR\fB\->{\*(Aqarchid\*(Aq}\fR
+\fI$solvable\fR\fB\->{archid}\fR
 \fIsolvable\fR\fB\&.archid\fR
 \fIsolvable\fR\fB\&.archid\fR
 .fi
@@ -1798,7 +2153,7 @@ Easy access to often used attributes of solvables\&. They are internally stored
 .\}
 .nf
 \fBId vendorid;\fR                    /* read/write */
-\fI$solvable\fR\fB\->{\*(Aqvendorid\*(Aq}\fR
+\fI$solvable\fR\fB\->{vendorid}\fR
 \fIsolvable\fR\fB\&.vendorid\fR
 \fIsolvable\fR\fB\&.vendorid\fR
 .fi
@@ -1865,7 +2220,7 @@ my \fI$bool\fR \fB=\fR \fI$solvable\fR\fB\->lookup_void(\fR\fI$keyname\fR\fB)\fR
 .RS 4
 .\}
 .nf
-\fBChksum *lookup_checksum(Id\fR \fIkeyname\fR\fB)\fR
+\fBChksum lookup_checksum(Id\fR \fIkeyname\fR\fB)\fR
 my \fI$chksum\fR \fB=\fR \fI$solvable\fR\fB\->lookup_checksum(\fR\fI$keyname\fR\fB)\fR;
 \fIchksum\fR \fB=\fR \fIsolvable\fR\fB\&.lookup_checksum(\fR\fIkeyname\fR\fB)\fR
 \fIchksum\fR \fB=\fR \fIsolvable\fR\fB\&.lookup_checksum(\fR\fIkeyname\fR\fB)\fR
@@ -1878,7 +2233,7 @@ my \fI$chksum\fR \fB=\fR \fI$solvable\fR\fB\->lookup_checksum(\fR\fI$keyname\fR\
 .RS 4
 .\}
 .nf
-\fBQueue lookup_idarray(Id\fR \fIkeyname\fR\fB, Id\fR \fImarker\fR \fB= \-1)\fR
+\fBId *lookup_idarray(Id\fR \fIkeyname\fR\fB, Id\fR \fImarker\fR \fB= \-1)\fR
 my \fI@ids\fR \fB=\fR \fI$solvable\fR\fB\->lookup_idarray(\fR\fI$keyname\fR\fB)\fR;
 \fIids\fR \fB=\fR \fIsolvable\fR\fB\&.lookup_idarray(\fR\fIkeyname\fR\fB)\fR
 \fIids\fR \fB=\fR \fIsolvable\fR\fB\&.lookup_idarray(\fR\fIkeyname\fR\fB)\fR
@@ -1891,7 +2246,7 @@ my \fI@ids\fR \fB=\fR \fI$solvable\fR\fB\->lookup_idarray(\fR\fI$keyname\fR\fB)\
 .RS 4
 .\}
 .nf
-\fBQueue lookup_deparray(Id\fR \fIkeyname\fR\fB, Id\fR \fImarker\fR \fB= \-1)\fR
+\fBDep *lookup_deparray(Id\fR \fIkeyname\fR\fB, Id\fR \fImarker\fR \fB= \-1)\fR
 my \fI@deps\fR \fB=\fR \fI$solvable\fR\fB\->lookup_deparray(\fR\fI$keyname\fR\fB)\fR;
 \fIdeps\fR \fB=\fR \fIsolvable\fR\fB\&.lookup_deparray(\fR\fIkeyname\fR\fB)\fR
 \fIdeps\fR \fB=\fR \fIsolvable\fR\fB\&.lookup_deparray(\fR\fIkeyname\fR\fB)\fR
@@ -1900,7 +2255,7 @@ my \fI@deps\fR \fB=\fR \fI$solvable\fR\fB\->lookup_deparray(\fR\fI$keyname\fR\fB
 .RE
 .\}
 .sp
-Generic lookup methods\&. Retrieve data stored for the specific keyname\&. The lookup_idarray() method will return an array of Ids, use lookup_deparray if you want an array of Dependency objects instead\&. Some Id arrays contain two parts of data divided by a specific marker, for example the provides array uses the SOLVABLE_FILEMARKER id to store both the ids provided by the package and the ids added by the addfileprovides method\&. The default, \-1, translates to the correct marker for the keyname and returns the first part of the array, use 1 to select the second part or 0 to retrive all ids including the marker\&.
+Generic lookup methods\&. Retrieve data stored for the specific keyname\&. The lookup_idarray() method will return an array of Ids, use lookup_deparray if you want an array of Dependency objects instead\&. Some Id arrays contain two parts of data divided by a specific marker, for example the provides array uses the SOLVABLE_FILEMARKER id to store both the ids provided by the package and the ids added by the addfileprovides method\&. The default, \-1, translates to the correct marker for the keyname and returns the first part of the array, use 1 to select the second part or 0 to retrieve all ids including the marker\&.
 .sp
 .if n \{\
 .RS 4
@@ -1936,6 +2291,21 @@ Add a new dependency to the attributes stored in keyname\&.
 .RS 4
 .\}
 .nf
+\fBvoid unset(Id\fR \fIkeyname\fR\fB)\fR;
+\fI$solvable\fR\fB\->unset(\fR\fI$keyname\fR\fB)\fR;
+\fIsolvable\fR\fB\&.unset(\fR\fIkeyname\fR\fB)\fR
+\fIsolvable\fR\fB\&.unset(\fR\fIkeyname\fR\fB)\fR
+.fi
+.if n \{\
+.RE
+.\}
+.sp
+Delete data stored for the specific keyname\&.
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
 \fBbool installable()\fR;
 \fI$solvable\fR\fB\->installable()\fR
 \fIsolvable\fR\fB\&.installable()\fR
@@ -1966,7 +2336,7 @@ Return true if the solvable is installed on the system\&.
 .RS 4
 .\}
 .nf
-\fBSelection *Selection(int\fR \fIsetflags\fR \fB= 0)\fR
+\fBSelection Selection(int\fR \fIsetflags\fR \fB= 0)\fR
 my \fI$sel\fR \fB=\fR \fI$solvable\fR\fB\->Selection()\fR;
 \fIsel\fR \fB=\fR \fIsolvable\fR\fB\&.Selection()\fR
 \fIsel\fR \fB=\fR \fIsolvable\fR\fB\&.Selection()\fR
@@ -1997,7 +2367,7 @@ Return a string describing the solvable\&. The string consists of the name, vers
 .\}
 .nf
 \fB<stringification>\fR
-my \fI$str\fR \fB= "\fR\fI$solvable\fR\fB"\fR;
+my \fI$str\fR \fB=\fR \fI$solvable\fR\fB\->str\fR;
 \fIstr\fR \fB= str(\fR\fIsolvable\fR\fB)\fR
 \fIstr\fR \fB=\fR \fIsolvable\fR\fB\&.to_s\fR
 .fi
@@ -2131,7 +2501,7 @@ Objects of this type will be created for every value matched by a dataiterator\&
 .\}
 .nf
 \fBPool *pool;\fR                             /* read only */
-\fI$d\fR\fB\->{\*(Aqpool\*(Aq}\fR
+\fI$d\fR\fB\->{pool}\fR
 \fId\fR\fB\&.pool\fR
 \fId\fR\fB\&.pool\fR
 .fi
@@ -2146,7 +2516,7 @@ Back pointer to pool\&.
 .\}
 .nf
 \fBRepo *repo;\fR                             /* read only */
-\fI$d\fR\fB\->{\*(Aqrepo\*(Aq}\fR
+\fI$d\fR\fB\->{repo}\fR
 \fId\fR\fB\&.repo\fR
 \fId\fR\fB\&.repo\fR
 .fi
@@ -2161,7 +2531,7 @@ The repository containing the matched object\&.
 .\}
 .nf
 \fBSolvable *solvable;\fR                     /* read only */
-\fI$d\fR\fB\->{\*(Aqsolvable\*(Aq}\fR
+\fI$d\fR\fB\->{solvable}\fR
 \fId\fR\fB\&.solvable\fR
 \fId\fR\fB\&.solvable\fR
 .fi
@@ -2176,7 +2546,7 @@ The solvable containing the value that was matched\&.
 .\}
 .nf
 \fBId solvid;\fR                              /* read only */
-\fI$d\fR\fB\->{\*(Aqsolvid\*(Aq}\fR
+\fI$d\fR\fB\->{solvid}\fR
 \fId\fR\fB\&.solvid\fR
 \fId\fR\fB\&.solvid\fR
 .fi
@@ -2320,7 +2690,7 @@ The secondary numeric value that was matched (only valid for types containing tw
 .RS 4
 .\}
 .nf
-\fBDatapos *pos()\fR;
+\fBDatapos pos()\fR;
 my \fI$pos\fR \fB=\fR \fI$d\fR\fB\->pos()\fR;
 \fIpos\fR \fB=\fR \fId\fR\fB\&.pos()\fR
 \fIpos\fR \fB=\fR \fId\fR\fB\&.pos()\fR
@@ -2335,7 +2705,7 @@ The position object of the current match\&. It can be used to do sub\-searches s
 .RS 4
 .\}
 .nf
-\fBDatapos *parentpos()\fR;
+\fBDatapos parentpos()\fR;
 my \fI$pos\fR \fB=\fR \fI$d\fR\fB\->parentpos()\fR;
 \fIpos\fR \fB=\fR \fId\fR\fB\&.parentpos()\fR
 \fIpos\fR \fB=\fR \fId\fR\fB\&.parentpos()\fR
@@ -2351,7 +2721,7 @@ The position object of the array containing the current match\&. It can be used
 .\}
 .nf
 \fB<stringification>\fR
-my \fI$str\fR \fB= "\fR\fI$d\fR\fB"\fR;
+my \fI$str\fR \fB=\fR \fI$d\fR\fB\->str\fR;
 \fIstr\fR \fB= str(\fR\fId\fR\fB)\fR
 \fIstr\fR \fB=\fR \fId\fR\fB\&.to_s\fR
 .fi
@@ -2367,17 +2737,17 @@ Selections are a way to easily deal with sets of packages\&. There are multiple
 .PP
 \fBSELECTION_NAME\fR
 .RS 4
-Create the selection by matching package names
+Create the selection by matching package names\&.
 .RE
 .PP
 \fBSELECTION_PROVIDES\fR
 .RS 4
-Create the selection by matching package provides
+Create the selection by matching package provides\&.
 .RE
 .PP
 \fBSELECTION_FILELIST\fR
 .RS 4
-Create the selection by matching package files
+Create the selection by matching package files\&.
 .RE
 .PP
 \fBSELECTION_CANON\fR
@@ -2431,7 +2801,7 @@ Return only one selection element describing the selected packages\&. The defaul
 .\}
 .nf
 \fBPool *pool;\fR                             /* read only */
-\fI$d\fR\fB\->{\*(Aqpool\*(Aq}\fR
+\fI$d\fR\fB\->{pool}\fR
 \fId\fR\fB\&.pool\fR
 \fId\fR\fB\&.pool\fR
 .fi
@@ -2521,7 +2891,7 @@ Add a raw element to the selection\&. Check the Job class for information about
 .RS 4
 .\}
 .nf
-\fBJob **jobs(int\fR \fIaction\fR\fB)\fR
+\fBJob *jobs(int\fR \fIaction\fR\fB)\fR
 my \fI@jobs\fR \fB=\fR \fI$sel\fR\fB\->jobs(\fR\fI$action\fR\fB)\fR;
 \fIjobs\fR \fB=\fR \fIsel\fR\fB\&.jobs(\fR\fIaction\fR\fB)\fR
 \fIjobs\fR \fB=\fR \fIsel\fR\fB\&.jobs(\fR\fIaction\fR\fB)\fR
@@ -2536,7 +2906,7 @@ Convert a selection into an array of Job objects\&. The action parameter is or\-
 .RS 4
 .\}
 .nf
-\fBSolvable **solvables()\fR
+\fBSolvable *solvables()\fR
 my \fI@solvables\fR \fB=\fR \fI$sel\fR\fB\->solvables()\fR;
 \fIsolvables\fR \fB=\fR \fIsel\fR\fB\&.solvables()\fR
 \fIsolvables\fR \fB=\fR \fIsel\fR\fB\&.solvables()\fR
@@ -2552,7 +2922,7 @@ Convert a selection into an array of Solvable objects\&.
 .\}
 .nf
 \fB<stringification>\fR
-my \fI$str\fR \fB= "\fR\fI$sel\fR\fB"\fR;
+my \fI$str\fR \fB=\fR \fI$sel\fR\fB\->str\fR;
 \fIstr\fR \fB= str(\fR\fIsel\fR\fB)\fR
 \fIstr\fR \fB=\fR \fIsel\fR\fB\&.to_s\fR
 .fi
@@ -2632,7 +3002,7 @@ Allow to break the dependencies of the matching packages\&. Handle with care\&.
 .PP
 \fBSOLVER_MULTIVERSION\fR
 .RS 4
-Mark the matched packages for multiversion install\&. If they get to be installed because of some other job, the installation will keep the old version of the package installed (for rpm by using \(oq`\-i\*(Aq\*(Aq instead of ``\-U\(cq\*(Aq)\&.
+Mark the matched packages for multiversion install\&. If they get to be installed because of some other job, the installation will keep the old version of the package installed (for rpm this is done by using \(lq\-i\(rq instead of \(lq\-U\(rq)\&.
 .RE
 .PP
 \fBSOLVER_LOCK\fR
@@ -2657,7 +3027,7 @@ Fix dependency problems of matching installed packages\&. The default is to igno
 .PP
 \fBSOLVER_USERINSTALLED\fR
 .RS 4
-The matching installed packages are considered to be installed by a user, thus not installed to fulfil some dependency\&. This is needed input for the calculation of unneeded packages for jobs that have the SOLVER_CLEANDEPS flag set\&.
+The matching installed packages are considered to be installed by a user, thus not installed to fulfill some dependency\&. This is needed input for the calculation of unneeded packages for jobs that have the SOLVER_CLEANDEPS flag set\&.
 .RE
 .PP
 \fBSOLVER_JOBMASK\fR
@@ -2669,7 +3039,7 @@ Action modifier constants:
 .PP
 \fBSOLVER_WEAK\fR
 .RS 4
-Makes the job a weak job\&. The solver tries to fulfil weak jobs, but does not report a problem if it is not possible to do so\&.
+Makes the job a weak job\&. The solver tries to fulfill weak jobs, but does not report a problem if it is not possible to do so\&.
 .RE
 .PP
 \fBSOLVER_ESSENTIAL\fR
@@ -2742,7 +3112,7 @@ See the section about set bits for more information\&.
 .\}
 .nf
 \fBPool *pool;\fR                             /* read only */
-\fI$job\fR\fB\->{\*(Aqpool\*(Aq}\fR
+\fI$job\fR\fB\->{pool}\fR
 \fId\fR\fB\&.pool\fR
 \fId\fR\fB\&.pool\fR
 .fi
@@ -2757,7 +3127,7 @@ Back pointer to pool\&.
 .\}
 .nf
 \fBId how;\fR                                 /* read/write */
-\fI$job\fR\fB\->{\*(Aqhow\*(Aq}\fR
+\fI$job\fR\fB\->{how}\fR
 \fId\fR\fB\&.how\fR
 \fId\fR\fB\&.how\fR
 .fi
@@ -2772,7 +3142,7 @@ Union of the selection, action, action modifier, and set flags\&. The selection
 .\}
 .nf
 \fBId what;\fR                                /* read/write */
-\fI$job\fR\fB\->{\*(Aqwhat\*(Aq}\fR
+\fI$job\fR\fB\->{what}\fR
 \fId\fR\fB\&.what\fR
 \fId\fR\fB\&.what\fR
 .fi
@@ -2787,7 +3157,7 @@ Id describing the set of packages, the meaning depends on the selection part of
 .RS 4
 .\}
 .nf
-\fBSolvable **solvables()\fR
+\fBSolvable *solvables()\fR
 my \fI@solvables\fR \fB=\fR \fI$job\fR\fB\->solvables()\fR;
 \fIsolvables\fR \fB=\fR \fIjob\fR\fB\&.solvables()\fR
 \fIsolvables\fR \fB=\fR \fIjob\fR\fB\&.solvables()\fR
@@ -2818,7 +3188,7 @@ Convenience function to find out if the job describes an update job with no matc
 .\}
 .nf
 \fB<stringification>\fR
-my \fI$str\fR \fB= "\fR\fI$job\fR\fB"\fR;
+my \fI$str\fR \fB=\fR \fI$job\fR\fB\->str\fR;
 \fIstr\fR \fB= str(\fR\fIjob\fR\fB)\fR
 \fIstr\fR \fB=\fR \fIjob\fR\fB\&.to_s\fR
 .fi
@@ -2867,9 +3237,11 @@ Set bits specify which parts of the specified packages where specified by the us
 .sp
 So if a package "screen\-1\-1" is installed for the x86_64 architecture and version "2\-1" is only available for the i586 architecture, installing package "screen\-2\&.1" will ask the user for confirmation because of the different architecture\&. When using the Selection class to create jobs the set bits are automatically added, e\&.g\&. selecting \(lqscreen\&.i586\(rq will automatically add SOLVER_SETARCH, and thus no problem will be reported\&.
 .SH "THE SOLVER CLASS"
+.sp
+Dependency solving is what this library is about\&. A solver object is needed for solving to store the result of the solver run\&. The solver object can be used multiple times for different jobs, reusing it allows the solver to re\-use the dependency rules it already computed\&.
 .SS "CONSTANTS"
 .sp
-Flags to modify some of the solver\(cqs behaviour:
+Flags to modify some of the solver\(cqs behavior:
 .PP
 \fBSOLVER_FLAG_ALLOW_DOWNGRADE\fR
 .RS 4
@@ -2893,7 +3265,7 @@ Allow the solver to change the name of an installed package, i\&.e\&. install a
 .PP
 \fBSOLVER_FLAG_ALLOW_UNINSTALL\fR
 .RS 4
-Allow the solver to deinstall installed packages to fulfil the jobs\&. This flag also includes the above flags\&. You may want to set this flag if you only have SOLVER_ERASE jobs, as in that case it\(cqs better for the user to check the transaction overview instead of approving every single package that needs to be deinstalled\&.
+Allow the solver to erase installed packages to fulfill the jobs\&. This flag also includes the above flags\&. You may want to set this flag if you only have SOLVER_ERASE jobs, as in that case it\(cqs better for the user to check the transaction overview instead of approving every single package that needs to be erased\&.
 .RE
 .PP
 \fBSOLVER_FLAG_NO_UPDATEPROVIDE\fR
@@ -2913,7 +3285,7 @@ Do not process optional (aka weak) dependencies\&.
 .PP
 \fBSOLVER_FLAG_ADD_ALREADY_RECOMMENDED\fR
 .RS 4
-Install recommened or supplemented packages even if they have no connection to the current transaction\&. You can use this feature to implement a simple way for the user to install new recommended packages that were not available in the past\&.
+Install recommended or supplemented packages even if they have no connection to the current transaction\&. You can use this feature to implement a simple way for the user to install new recommended packages that were not available in the past\&.
 .RE
 .PP
 \fBSOLVER_FLAG_NO_INFARCHCHECK\fR
@@ -2950,7 +3322,7 @@ A rule to implement the update policy of installed packages\&. Every installed p
 .PP
 \fBSOLVER_RULE_FEATURE\fR
 .RS 4
-Feature rules are fallback rules used when a update rule is disabled\&. They include all packages that may replace the installed package ignoring the update policy, i\&.e\&. they contain downgrades, arch changes and so on\&. Without them, the solver would simply deinstall installed packages if their update rule gets disabled\&.
+Feature rules are fallback rules used when a update rule is disabled\&. They include all packages that may replace the installed package ignoring the update policy, i\&.e\&. they contain downgrades, arch changes and so on\&. Without them, the solver would simply erase installed packages if their update rule gets disabled\&.
 .RE
 .PP
 \fBSOLVER_RULE_JOB\fR
@@ -2970,7 +3342,7 @@ Infarch rules are also negative assertions, they disallow the installation of pa
 .PP
 \fBSOLVER_RULE_CHOICE\fR
 .RS 4
-Choice rules are used to make sure that the solver preferes updating to installing different packages when some dependency is provided by multiple packages with different names\&. The solver may always break choice rules, so you will not see them when a problem is found\&.
+Choice rules are used to make sure that the solver prefers updating to installing different packages when some dependency is provided by multiple packages with different names\&. The solver may always break choice rules, so you will not see them when a problem is found\&.
 .RE
 .PP
 \fBSOLVER_RULE_LEARNT\fR
@@ -2987,7 +3359,7 @@ This rule was added to prevent the installation of a package of an architecture
 .PP
 \fBSOLVER_RULE_RPM_NOTHING_PROVIDES_DEP\fR
 .RS 4
-The package contanis a required dependency which was not provided by any package\&.
+The package contains a required dependency which was not provided by any package\&.
 .RE
 .PP
 \fBSOLVER_RULE_RPM_PACKAGE_REQUIRES\fR
@@ -3064,7 +3436,7 @@ The solver ask for permission before changing the vendor of installed packages\&
 .PP
 \fBPOLICY_ILLEGAL_NAMECHANGE\fR
 .RS 4
-The solver ask for permission before replacing an installed packages with a packge that has a different name\&.
+The solver ask for permission before replacing an installed packages with a package that has a different name\&.
 .RE
 .sp
 Solution element type constants
@@ -3130,7 +3502,7 @@ The problem can be solved by allowing to replace the package with some other pac
 .\}
 .nf
 \fBPool *pool;\fR                             /* read only */
-\fI$job\fR\fB\->{\*(Aqpool\*(Aq}\fR
+\fI$job\fR\fB\->{pool}\fR
 \fId\fR\fB\&.pool\fR
 \fId\fR\fB\&.pool\fR
 .fi
@@ -3173,7 +3545,7 @@ Set/get a solver specific flag\&. The flags define the policies the solver has t
 .RS 4
 .\}
 .nf
-\fBProblem **solve(Job *\fR\fIjobs\fR\fB)\fR
+\fBProblem *solve(Job *\fR\fIjobs\fR\fB)\fR
 my \fI@problems\fR \fB=\fR \fI$solver\fR\fB\->solve(\e\fR\fI@jobs\fR\fB)\fR;
 \fIproblems\fR \fB=\fR \fIsolver\fR\fB\&.solve(\fR\fIjobs\fR\fB)\fR
 \fIproblems\fR \fB=\fR \fIsolver\fR\fB\&.solve(\fR\fIjobs\fR\fB)\fR
@@ -3188,7 +3560,7 @@ Solve a problem specified in the job list (plus the jobs defined in the pool)\&.
 .RS 4
 .\}
 .nf
-\fBTransaction *transaction()\fR
+\fBTransaction transaction()\fR
 my \fI$trans\fR \fB=\fR \fI$solver\fR\fB\->transaction()\fR;
 \fItrans\fR \fB=\fR \fIsolver\fR\fB\&.transaction()\fR
 \fItrans\fR \fB=\fR \fIsolver\fR\fB\&.transaction()\fR
@@ -3208,7 +3580,7 @@ Problems are the way of the solver to interact with the user\&. You can simply l
 .\}
 .nf
 \fBSolver *solv;\fR                           /* read only */
-\fI$problem\fR\fB\->{\*(Aqsolv\*(Aq}\fR
+\fI$problem\fR\fB\->{solv}\fR
 \fIproblem\fR\fB\&.solv\fR
 \fIproblem\fR\fB\&.solv\fR
 .fi
@@ -3223,7 +3595,7 @@ Back pointer to solver object\&.
 .\}
 .nf
 \fBId id;\fR                                  /* read only */
-\fI$problem\fR\fB\->{\*(Aqid\*(Aq}\fR
+\fI$problem\fR\fB\->{id}\fR
 \fIproblem\fR\fB\&.id\fR
 \fIproblem\fR\fB\&.id\fR
 .fi
@@ -3238,7 +3610,7 @@ Id of the problem\&. The first problem has Id 1, they are numbered consecutively
 .RS 4
 .\}
 .nf
-\fBRule *findproblemrule()\fR
+\fBRule findproblemrule()\fR
 my \fI$probrule\fR \fB=\fR \fI$problem\fR\fB\->findproblemrule()\fR;
 \fIprobrule\fR \fB=\fR \fIproblem\fR\fB\&.findproblemrule()\fR
 \fIprobrule\fR \fB=\fR \fIproblem\fR\fB\&.findproblemrule()\fR
@@ -3247,13 +3619,13 @@ my \fI$probrule\fR \fB=\fR \fI$problem\fR\fB\->findproblemrule()\fR;
 .RE
 .\}
 .sp
-Return the rule that caused the problem\&. Of cource in most situations there is no single responsible rule, but many rules that interconnect with each created the problem\&. Nevertheless, the solver uses some heuristic approch to find a rule that somewhat describes the problem best to the user\&.
+Return the rule that caused the problem\&. Of course in most situations there is no single responsible rule, but many rules that interconnect with each created the problem\&. Nevertheless, the solver uses some heuristic approach to find a rule that somewhat describes the problem best to the user\&.
 .sp
 .if n \{\
 .RS 4
 .\}
 .nf
-\fBRule **findallproblemrules(bool\fR \fIunfiltered\fR \fB= 0)\fR
+\fBRule *findallproblemrules(bool\fR \fIunfiltered\fR \fB= 0)\fR
 my \fI@probrules\fR \fB=\fR \fI$problem\fR\fB\->findallproblemrules()\fR;
 \fIprobrules\fR \fB=\fR \fIproblem\fR\fB\&.findallproblemrule()\fR
 \fIprobrules\fR \fB=\fR \fIproblem\fR\fB\&.findallproblemrule()\fR
@@ -3268,7 +3640,7 @@ Return all rules responsible for the problem\&. The returned set of rules contai
 .RS 4
 .\}
 .nf
-\fBSolutions **solutions()\fR
+\fBSolution *solutions()\fR
 my \fI@solutions\fR \fB=\fR \fI$problem\fR\fB\->solutions()\fR;
 \fIsolutions\fR \fB=\fR \fIproblem\fR\fB\&.solutions()\fR
 \fIsolutions\fR \fB=\fR \fIproblem\fR\fB\&.solutions()\fR
@@ -3293,6 +3665,21 @@ my \fI$cnt\fR \fB=\fR \fI$problem\fR\fB\->solution_count()\fR;
 .\}
 .sp
 Return the number of solutions without creating solution objects\&.
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+\fB<stringification>\fR
+my \fI$str\fR \fB=\fR \fI$problem\fR\fB\->str\fR;
+\fIstr\fR \fB= str(\fR\fIproblem\fR\fB)\fR
+\fIstr\fR \fB=\fR \fIproblem\fR\fB\&.to_s\fR
+.fi
+.if n \{\
+.RE
+.\}
+.sp
+Return a string describing the problem\&. This is a convenience function, it is a shorthand for calling findproblemrule(), then ruleinfo() on the problem rule and problemstr() on the ruleinfo object\&.
 .SH "THE RULE CLASS"
 .sp
 Rules are the basic block of sat solving\&. Each package dependency gets translated into one or multiple rules\&.
@@ -3303,7 +3690,7 @@ Rules are the basic block of sat solving\&. Each package dependency gets transla
 .\}
 .nf
 \fBSolver *solv;\fR                           /* read only */
-\fI$rule\fR\fB\->{\*(Aqsolv\*(Aq}\fR
+\fI$rule\fR\fB\->{solv}\fR
 \fIrule\fR\fB\&.solv\fR
 \fIrule\fR\fB\&.solv\fR
 .fi
@@ -3318,7 +3705,7 @@ Back pointer to solver object\&.
 .\}
 .nf
 \fBId id;\fR                                  /* read only */
-\fI$rule\fR\fB\->{\*(Aqid\*(Aq}\fR
+\fI$rule\fR\fB\->{id}\fR
 \fIrule\fR\fB\&.id\fR
 \fIrule\fR\fB\&.id\fR
 .fi
@@ -3333,7 +3720,7 @@ The id of the rule\&.
 .\}
 .nf
 \fBint type;\fR                               /* read only */
-\fI$rule\fR\fB\->{\*(Aqtype\*(Aq}\fR
+\fI$rule\fR\fB\->{type}\fR
 \fIrule\fR\fB\&.type\fR
 \fIrule\fR\fB\&.type\fR
 .fi
@@ -3348,7 +3735,7 @@ The basic type of the rule\&. See the constant section of the solver class for t
 .RS 4
 .\}
 .nf
-\fBRuleinfo *info()\fR
+\fBRuleinfo info()\fR
 my \fI$ruleinfo\fR \fB=\fR \fI$rule\fR\fB\->info()\fR;
 \fIruleinfo\fR \fB=\fR \fIrule\fR\fB\&.info()\fR
 \fIruleinfo\fR \fB=\fR \fIrule\fR\fB\&.info()\fR
@@ -3363,7 +3750,7 @@ Return a Ruleinfo object that contains information about why the rule was create
 .RS 4
 .\}
 .nf
-\fBRuleinfo **allinfos()\fR
+\fBRuleinfo *allinfos()\fR
 my \fI@ruleinfos\fR \fB=\fR \fI$rule\fR\fB\->allinfos()\fR;
 \fIruleinfos\fR \fB=\fR \fIrule\fR\fB\&.allinfos()\fR
 \fIruleinfos\fR \fB=\fR \fIrule\fR\fB\&.allinfos()\fR
@@ -3398,7 +3785,7 @@ A Ruleinfo describes one reason why a rule was created\&.
 .\}
 .nf
 \fBSolver *solv;\fR                           /* read only */
-\fI$ruleinfo\fR\fB\->{\*(Aqsolv\*(Aq}\fR
+\fI$ruleinfo\fR\fB\->{solv}\fR
 \fIruleinfo\fR\fB\&.solv\fR
 \fIruleinfo\fR\fB\&.solv\fR
 .fi
@@ -3413,7 +3800,7 @@ Back pointer to solver object\&.
 .\}
 .nf
 \fBint type;\fR                               /* read only */
-\fI$ruleinfo\fR\fB\->{\*(Aqtype\*(Aq}\fR
+\fI$ruleinfo\fR\fB\->{type}\fR
 \fIruleinfo\fR\fB\&.type\fR
 \fIruleinfo\fR\fB\&.type\fR
 .fi
@@ -3428,7 +3815,7 @@ The type of the ruleinfo\&. See the constant section of the solver class for the
 .\}
 .nf
 \fBDep *dep;\fR                               /* read only */
-\fI$ruleinfo\fR\fB\->{\*(Aqdep\*(Aq}\fR
+\fI$ruleinfo\fR\fB\->{dep}\fR
 \fIruleinfo\fR\fB\&.dep\fR
 \fIruleinfo\fR\fB\&.dep\fR
 .fi
@@ -3458,7 +3845,7 @@ The Id of the dependency leading to the creation of the rule, or zero\&.
 .\}
 .nf
 \fBSolvable *solvable;\fR                     /* read only */
-\fI$ruleinfo\fR\fB\->{\*(Aqsolvable\*(Aq}\fR
+\fI$ruleinfo\fR\fB\->{solvable}\fR
 \fIruleinfo\fR\fB\&.solvable\fR
 \fIruleinfo\fR\fB\&.solvable\fR
 .fi
@@ -3473,7 +3860,7 @@ The involved Solvable, e\&.g\&. the one containing the dependency\&.
 .\}
 .nf
 \fBSolvable *othersolvable;\fR                /* read only */
-\fI$ruleinfo\fR\fB\->{\*(Aqothersolvable\*(Aq}\fR
+\fI$ruleinfo\fR\fB\->{othersolvable}\fR
 \fIruleinfo\fR\fB\&.othersolvable\fR
 \fIruleinfo\fR\fB\&.othersolvable\fR
 .fi
@@ -3507,7 +3894,7 @@ A solution solves one specific problem\&. It consists of multiple solution eleme
 .\}
 .nf
 \fBSolver *solv;\fR                           /* read only */
-\fI$solution\fR\fB\->{\*(Aqsolv\*(Aq}\fR
+\fI$solution\fR\fB\->{solv}\fR
 \fIsolution\fR\fB\&.solv\fR
 \fIsolution\fR\fB\&.solv\fR
 .fi
@@ -3522,7 +3909,7 @@ Back pointer to solver object\&.
 .\}
 .nf
 \fBId problemid;\fR                           /* read only */
-\fI$solution\fR\fB\->{\*(Aqproblemid\*(Aq}\fR
+\fI$solution\fR\fB\->{problemid}\fR
 \fIsolution\fR\fB\&.problemid\fR
 \fIsolution\fR\fB\&.problemid\fR
 .fi
@@ -3537,7 +3924,7 @@ Id of the problem the solution solves\&.
 .\}
 .nf
 \fBId id;\fR                                  /* read only */
-\fI$solution\fR\fB\->{\*(Aqid\*(Aq}\fR
+\fI$solution\fR\fB\->{id}\fR
 \fIsolution\fR\fB\&.id\fR
 \fIsolution\fR\fB\&.id\fR
 .fi
@@ -3552,7 +3939,7 @@ Id of the solution\&. The first solution has Id 1, they are numbered consecutive
 .RS 4
 .\}
 .nf
-\fBSolutionelement **elements(bool\fR \fIexpandreplaces\fR \fB= 0)\fR
+\fBSolutionelement *elements(bool\fR \fIexpandreplaces\fR \fB= 0)\fR
 my \fI@solutionelements\fR \fB=\fR \fI$solution\fR\fB\->elements()\fR;
 \fIsolutionelements\fR \fB=\fR \fIsolution\fR\fB\&.elements()\fR
 \fIsolutionelements\fR \fB=\fR \fIsolution\fR\fB\&.elements()\fR
@@ -3561,7 +3948,7 @@ my \fI@solutionelements\fR \fB=\fR \fI$solution\fR\fB\->elements()\fR;
 .RE
 .\}
 .sp
-Return an array containing the elements describing what neeeds to be done to implement the specific solution\&. If expandreplaces is true, elements of type SOLVER_SOLUTION_REPLACE will be replaced by one or more elements replace elements describing the policy mismatches\&.
+Return an array containing the elements describing what needs to be done to implement the specific solution\&. If expandreplaces is true, elements of type SOLVER_SOLUTION_REPLACE will be replaced by one or more elements replace elements describing the policy mismatches\&.
 .sp
 .if n \{\
 .RS 4
@@ -3587,7 +3974,7 @@ A solution element describes a single action of a solution\&. The action is alwa
 .\}
 .nf
 \fBSolver *solv;\fR                           /* read only */
-\fI$solutionelement\fR\fB\->{\*(Aqsolv\*(Aq}\fR
+\fI$solutionelement\fR\fB\->{solv}\fR
 \fIsolutionelement\fR\fB\&.solv\fR
 \fIsolutionelement\fR\fB\&.solv\fR
 .fi
@@ -3602,7 +3989,7 @@ Back pointer to solver object\&.
 .\}
 .nf
 \fBId problemid;\fR                           /* read only */
-\fI$solutionelement\fR\fB\->{\*(Aqproblemid\*(Aq}\fR
+\fI$solutionelement\fR\fB\->{problemid}\fR
 \fIsolutionelement\fR\fB\&.problemid\fR
 \fIsolutionelement\fR\fB\&.problemid\fR
 .fi
@@ -3617,7 +4004,7 @@ Id of the problem the element (partly) solves\&.
 .\}
 .nf
 \fBId solutionid;\fR                          /* read only */
-\fI$solutionelement\fR\fB\->{\*(Aqsolutionid\*(Aq}\fR
+\fI$solutionelement\fR\fB\->{solutionid}\fR
 \fIsolutionelement\fR\fB\&.solutionid\fR
 \fIsolutionelement\fR\fB\&.solutionid\fR
 .fi
@@ -3632,7 +4019,7 @@ Id of the solution the element is a part of\&.
 .\}
 .nf
 \fBId id;\fR                                  /* read only */
-\fI$solutionelement\fR\fB\->{\*(Aqid\*(Aq}\fR
+\fI$solutionelement\fR\fB\->{id}\fR
 \fIsolutionelement\fR\fB\&.id\fR
 \fIsolutionelement\fR\fB\&.id\fR
 .fi
@@ -3647,7 +4034,7 @@ Id of the solution element\&. The first element has Id 1, they are numbered cons
 .\}
 .nf
 \fBId type;\fR                                /* read only */
-\fI$solutionelement\fR\fB\->{\*(Aqtype\*(Aq}\fR
+\fI$solutionelement\fR\fB\->{type}\fR
 \fIsolutionelement\fR\fB\&.type\fR
 \fIsolutionelement\fR\fB\&.type\fR
 .fi
@@ -3662,7 +4049,7 @@ Type of the solution element\&. See the constant section of the solver class for
 .\}
 .nf
 \fBSolvable *solvable;\fR                     /* read only */
-\fI$solutionelement\fR\fB\->{\*(Aqsolvable\*(Aq}\fR
+\fI$solutionelement\fR\fB\->{solvable}\fR
 \fIsolutionelement\fR\fB\&.solvable\fR
 \fIsolutionelement\fR\fB\&.solvable\fR
 .fi
@@ -3677,7 +4064,7 @@ The installed solvable that needs to be replaced for replacement elements\&.
 .\}
 .nf
 \fBSolvable *replacement;\fR                  /* read only */
-\fI$solutionelement\fR\fB\->{\*(Aqreplacement\*(Aq}\fR
+\fI$solutionelement\fR\fB\->{replacement}\fR
 \fIsolutionelement\fR\fB\&.replacement\fR
 \fIsolutionelement\fR\fB\&.replacement\fR
 .fi
@@ -3692,7 +4079,7 @@ The solvable that needs to be installed to fix the problem\&.
 .\}
 .nf
 \fBint jobidx;\fR                             /* read only */
-\fI$solutionelement\fR\fB\->{\*(Aqjobidx\*(Aq}\fR
+\fI$solutionelement\fR\fB\->{jobidx}\fR
 \fIsolutionelement\fR\fB\&.jobidx\fR
 \fIsolutionelement\fR\fB\&.jobidx\fR
 .fi
@@ -3707,7 +4094,7 @@ The index of the job that needs to be removed to fix the problem, or \-1 if the
 .RS 4
 .\}
 .nf
-\fBSolutionelement **replaceelements()\fR
+\fBSolutionelement *replaceelements()\fR
 my \fI@solutionelements\fR \fB=\fR \fI$solutionelement\fR\fB\->replaceelements()\fR;
 \fIsolutionelements\fR \fB=\fR \fIsolutionelement\fR\fB\&.replaceelements()\fR
 \fIsolutionelements\fR \fB=\fR \fIsolutionelement\fR\fB\&.replaceelements()\fR
@@ -3737,7 +4124,7 @@ Return an integer that contains the policy mismatch bits or\-ed together, or zer
 .RS 4
 .\}
 .nf
-\fBJob *Job()\fR
+\fBJob Job()\fR
 my \fI$job\fR \fB=\fR \fI$solutionelement\fR\fB\->Job()\fR;
 \fIillegal\fR \fB=\fR \fIsolutionelement\fR\fB\&.Job()\fR
 \fIillegal\fR \fB=\fR \fIsolutionelement\fR\fB\&.Job()\fR
@@ -3763,6 +4150,8 @@ my \fI$str\fR \fB=\fR \fI$solutionelement\fR\fB\->str()\fR;
 .sp
 A string describing the change the solution element consists of\&.
 .SH "THE TRANSACTION CLASS"
+.sp
+Transactions describe the output of a solver run\&. A transaction contains a number of transaction elements, each either the installation of a new package or the removal of an already installed package\&. The Transaction class supports a classify() method that puts the elements into different groups so that a transaction can be presented to the user in a meaningful way\&.
 .SS "CONSTANTS"
 .sp
 Transaction element types, both active and passive
@@ -3774,7 +4163,7 @@ This element does nothing\&. Used to map element types that do not match the vie
 .PP
 \fBSOLVER_TRANSACTION_INSTALL\fR
 .RS 4
-This element installes a package\&.
+This element installs a package\&.
 .RE
 .PP
 \fBSOLVER_TRANSACTION_ERASE\fR
@@ -3918,7 +4307,7 @@ Do not throw away the dependency graph used for ordering the transaction\&. This
 .\}
 .nf
 \fBPool *pool;\fR                             /* read only */
-\fI$trans\fR\fB\->{\*(Aqpool\*(Aq}\fR
+\fI$trans\fR\fB\->{pool}\fR
 \fItrans\fR\fB\&.pool\fR
 \fItrans\fR\fB\&.pool\fR
 .fi
@@ -3948,10 +4337,10 @@ Returns true if the transaction does not do anything, i\&.e\&. has no elements\&
 .RS 4
 .\}
 .nf
-\fBSolvable **newpackages()\fR;
-my \fI@newsolvables\fR \fB=\fR \fI$trans\fR\fB\->newpackages()\fR;
-\fInewsolvables\fR \fB=\fR \fItrans\fR\fB\&.newpackages()\fR
-\fInewsolvables\fR \fB=\fR \fItrans\fR\fB\&.newpackages()\fR
+\fBSolvable *newsolvables()\fR;
+my \fI@newsolvables\fR \fB=\fR \fI$trans\fR\fB\->newsolvables()\fR;
+\fInewsolvables\fR \fB=\fR \fItrans\fR\fB\&.newsolvables()\fR
+\fInewsolvables\fR \fB=\fR \fItrans\fR\fB\&.newsolvables()\fR
 .fi
 .if n \{\
 .RE
@@ -3963,10 +4352,10 @@ Return all packages that are to be installed by the transaction\&. This are the
 .RS 4
 .\}
 .nf
-\fBSolvable **keptpackages()\fR;
-my \fI@keptsolvables\fR \fB=\fR \fI$trans\fR\fB\->keptpackages()\fR;
-\fIkeptsolvables\fR \fB=\fR \fItrans\fR\fB\&.keptpackages()\fR
-\fIkeptsolvables\fR \fB=\fR \fItrans\fR\fB\&.keptpackages()\fR
+\fBSolvable *keptsolvables()\fR;
+my \fI@keptsolvables\fR \fB=\fR \fI$trans\fR\fB\->keptsolvables()\fR;
+\fIkeptsolvables\fR \fB=\fR \fItrans\fR\fB\&.keptsolvables()\fR
+\fIkeptsolvables\fR \fB=\fR \fItrans\fR\fB\&.keptsolvables()\fR
 .fi
 .if n \{\
 .RE
@@ -3978,7 +4367,7 @@ Return all installed packages that the transaction will keep installed\&.
 .RS 4
 .\}
 .nf
-\fBSolvable **steps()\fR;
+\fBSolvable *steps()\fR;
 my \fI@steps\fR \fB=\fR \fI$trans\fR\fB\->steps()\fR;
 \fIsteps\fR \fB=\fR \fItrans\fR\fB\&.steps()\fR
 \fIsteps\fR \fB=\fR \fItrans\fR\fB\&.steps()\fR
@@ -4008,7 +4397,7 @@ Return the transaction type of the specified solvable\&. See the CONSTANTS secti
 .RS 4
 .\}
 .nf
-\fBTransactionClass **classify(int\fR \fImode\fR \fB= 0)\fR
+\fBTransactionClass *classify(int\fR \fImode\fR \fB= 0)\fR
 my \fI@classes\fR \fB=\fR \fI$trans\fR\fB\->classify()\fR;
 \fIclasses\fR \fB=\fR \fItrans\fR\fB\&.classify()\fR
 \fIclasses\fR \fB=\fR \fItrans\fR\fB\&.classify()\fR
@@ -4023,7 +4412,7 @@ Group the transaction elements into classes so that they can be displayed in a s
 .RS 4
 .\}
 .nf
-\fBSolvable *othersolvable(Solvable *\fR\fIsolvable\fR\fB)\fR;
+\fBSolvable othersolvable(Solvable *\fR\fIsolvable\fR\fB)\fR;
 my \fI$other\fR \fB=\fR \fI$trans\fR\fB\->othersolvable(\fR\fI$solvable\fR\fB)\fR;
 \fIother\fR \fB=\fR \fItrans\fR\fB\&.othersolvable(\fR\fIsolvable\fR\fB)\fR
 \fIother\fR \fB=\fR \fItrans\fR\fB\&.othersolvable(\fR\fIsolvable\fR\fB)\fR
@@ -4042,7 +4431,7 @@ Thus, the \(lqother\(rq solvable is normally the package that is also shown for
 .RS 4
 .\}
 .nf
-\fBSolvable **allothersolvables(Solvable *\fR\fIsolvable\fR\fB)\fR;
+\fBSolvable *allothersolvables(Solvable *\fR\fIsolvable\fR\fB)\fR;
 my \fI@others\fR \fB=\fR \fI$trans\fR\fB\->allothersolvables(\fR\fI$solvable\fR\fB)\fR;
 \fIothers\fR \fB=\fR \fItrans\fR\fB\&.allothersolvables(\fR\fIsolvable\fR\fB)\fR
 \fIothers\fR \fB=\fR \fItrans\fR\fB\&.allothersolvables(\fR\fIsolvable\fR\fB)\fR
@@ -4110,7 +4499,7 @@ erase  B
 .RE
 .\}
 .sp
-in active mode\&. If the mode containes SOLVER_TRANSACTION_SHOW_ALL, the passive mode list will be unchanged but the active mode list will just contain A\-2\-1\&.
+in active mode\&. If the mode contains SOLVER_TRANSACTION_SHOW_ALL, the passive mode list will be unchanged but the active mode list will just contain A\-2\-1\&.
 .SH "THE TRANSACTIONCLASS CLASS"
 .sp
 Objects of this type are returned by the classify() Transaction method\&.
@@ -4121,7 +4510,7 @@ Objects of this type are returned by the classify() Transaction method\&.
 .\}
 .nf
 \fBTransaction *transaction;\fR               /* read only */
-\fI$class\fR\fB\->{\*(Aqtransaction\*(Aq}\fR
+\fI$class\fR\fB\->{transaction}\fR
 \fIclass\fR\fB\&.transaction\fR
 \fIclass\fR\fB\&.transaction\fR
 .fi
@@ -4136,7 +4525,7 @@ Back pointer to transaction object\&.
 .\}
 .nf
 \fBint type;\fR                               /* read only */
-\fI$class\fR\fB\->{\*(Aqtype\*(Aq}\fR
+\fI$class\fR\fB\->{type}\fR
 \fIclass\fR\fB\&.type\fR
 \fIclass\fR\fB\&.type\fR
 .fi
@@ -4151,7 +4540,7 @@ The type of the transaction elements in the class\&.
 .\}
 .nf
 \fBint count;\fR                              /* read only */
-\fI$class\fR\fB\->{\*(Aqcount\*(Aq}\fR
+\fI$class\fR\fB\->{count}\fR
 \fIclass\fR\fB\&.count\fR
 \fIclass\fR\fB\&.count\fR
 .fi
@@ -4166,7 +4555,7 @@ The number of elements in the class\&.
 .\}
 .nf
 \fBconst char *\fR\fIfromstr\fR;
-\fI$class\fR\fB\->{\*(Aqfromstr\*(Aq}\fR
+\fI$class\fR\fB\->{fromstr}\fR
 \fIclass\fR\fB\&.fromstr\fR
 \fIclass\fR\fB\&.fromstr\fR
 .fi
@@ -4181,7 +4570,7 @@ The old vendor or architecture\&.
 .\}
 .nf
 \fBconst char *\fR\fItostr\fR;
-\fI$class\fR\fB\->{\*(Aqtostr\*(Aq}\fR
+\fI$class\fR\fB\->{tostr}\fR
 \fIclass\fR\fB\&.tostr\fR
 \fIclass\fR\fB\&.tostr\fR
 .fi
@@ -4196,7 +4585,7 @@ The new vendor or architecture\&.
 .\}
 .nf
 \fBId\fR \fIfromid\fR;
-\fI$class\fR\fB\->{\*(Aqfromid\*(Aq}\fR
+\fI$class\fR\fB\->{fromid}\fR
 \fIclass\fR\fB\&.fromid\fR
 \fIclass\fR\fB\&.fromid\fR
 .fi
@@ -4211,7 +4600,7 @@ The id of the old vendor or architecture\&.
 .\}
 .nf
 \fBId\fR \fItoid\fR;
-\fI$class\fR\fB\->{\*(Aqtoid\*(Aq}\fR
+\fI$class\fR\fB\->{toid}\fR
 \fIclass\fR\fB\&.toid\fR
 \fIclass\fR\fB\&.toid\fR
 .fi
@@ -4245,7 +4634,7 @@ Checksums (also called hashes) are used to make sure that downloaded data is not
 .RS 4
 .\}
 .nf
-\fBChksum *Chksum(Id\fR \fItype\fR\fB)\fR
+\fBChksum Chksum(Id\fR \fItype\fR\fB)\fR
 my \fI$chksum\fR \fB= solv::Chksum\->new(\fR\fI$type\fR\fB)\fR;
 \fIchksum\fR \fB= solv\&.Chksum(\fR\fItype\fR\fB)\fR
 \fIchksum\fR \fB= Solv::Chksum\&.new(\fR\fItype\fR\fB)\fR
@@ -4274,7 +4663,7 @@ These keys are constants in the \fBsolv\fR class\&.
 .RS 4
 .\}
 .nf
-\fBChksum *Chksum(Id\fR \fItype\fR\fB, const char *\fR\fIhex\fR\fB)\fR
+\fBChksum Chksum(Id\fR \fItype\fR\fB, const char *\fR\fIhex\fR\fB)\fR
 my \fI$chksum\fR \fB= solv::Chksum\->new(\fR\fI$type\fR\fB,\fR \fI$hex\fR\fB)\fR;
 \fIchksum\fR \fB= solv\&.Chksum(\fR\fItype\fR\fB,\fR \fIhex\fR\fB)\fR
 \fIchksum\fR \fB= Solv::Chksum\&.new(\fR\fItype\fR\fB,\fR \fIhex\fR\fB)\fR
@@ -4291,7 +4680,7 @@ Create an already finalized checksum object\&.
 .\}
 .nf
 \fBId type;\fR                        /* read only */
-\fI$chksum\fR\fB\->{\*(Aqtype\*(Aq}\fR
+\fI$chksum\fR\fB\->{type}\fR
 \fIchksum\fR\fB\&.type\fR
 \fIchksum\fR\fB\&.type\fR
 .fi
@@ -4412,7 +4801,7 @@ Checksums are equal if they are of the same type and the finalized results are t
 .\}
 .nf
 \fB<stringification>\fR
-my \fI$str\fR \fB= "\fR\fI$chksum\fR\fB"\fR;
+my \fI$str\fR \fB=\fR \fI$chksum\fR\fB\->str\fR;
 \fIstr\fR \fB= str(\fR\fIchksum\fR\fB)\fR
 \fIstr\fR \fB=\fR \fIchksum\fR\fB\&.to_s\fR
 .fi
@@ -4517,7 +4906,7 @@ Flush the file\&. Returns false if there was an error\&. Flushing a closed file
 Close the file\&. This is needed for languages like Ruby, that do not destruct objects right after they are no longer referenced\&. In that case, it is good style to close open files so that the file descriptors are freed right away\&. Returns false if there was an error\&.
 .SH "THE REPODATA CLASS"
 .sp
-The Repodata stores attrinbutes for packages and the repository itself, each repository can have multiple repodata areas\&. You normally only need to directly access them if you implement lazy downloading of repository data\&. Repodata areas are created by calling the repository\(cqs add_repodata() method or by using repo_add methods without the REPO_REUSE_REPODATA or REPO_USE_LOADING flag\&.
+The Repodata stores attributes for packages and the repository itself, each repository can have multiple repodata areas\&. You normally only need to directly access them if you implement lazy downloading of repository data\&. Repodata areas are created by calling the repository\(cqs add_repodata() method or by using repo_add methods without the REPO_REUSE_REPODATA or REPO_USE_LOADING flag\&.
 .SS "ATTRIBUTES"
 .sp
 .if n \{\
@@ -4525,7 +4914,7 @@ The Repodata stores attrinbutes for packages and the repository itself, each rep
 .\}
 .nf
 \fBRepo *repo;\fR                     /* read only */
-\fI$data\fR\fB\->{\*(Aqrepo\*(Aq}\fR
+\fI$data\fR\fB\->{repo}\fR
 \fIdata\fR\fB\&.repo\fR
 \fIdata\fR\fB\&.repo\fR
 .fi
@@ -4540,7 +4929,7 @@ Back pointer to repository object\&.
 .\}
 .nf
 \fBId id;\fR                                  /* read only */
-\fI$data\fR\fB\->{\*(Aqid\*(Aq}\fR
+\fI$data\fR\fB\->{id}\fR
 \fIdata\fR\fB\&.id\fR
 \fIdata\fR\fB\&.id\fR
 .fi
@@ -4549,7 +4938,7 @@ Back pointer to repository object\&.
 .\}
 .sp
 The id of the repodata area\&. Repodata ids of different repositories overlap\&.
-.SS "METHODS ===="
+.SS "METHODS"
 .sp
 .if n \{\
 .RS 4
@@ -4672,7 +5061,7 @@ my \fI@ids\fR \fB=\fR \fI$data\fR\fB\->lookup_idarray(\fR\fI$solvid\fR\fB,\fR \f
 .RS 4
 .\}
 .nf
-\fBChksum *lookup_checksum(Id\fR \fIsolvid\fR\fB, Id\fR \fIkeyname\fR\fB)\fR
+\fBChksum lookup_checksum(Id\fR \fIsolvid\fR\fB, Id\fR \fIkeyname\fR\fB)\fR
 my \fI$chksum\fR \fB=\fR \fI$data\fR\fB\->lookup_checksum(\fR\fI$solvid\fR\fB,\fR \fI$keyname\fR\fB)\fR;
 \fIchksum\fR \fB=\fR \fIdata\fR\fB\&.lookup_checksum(\fR\fIsolvid\fR\fB,\fR \fIkeyname\fR\fB)\fR
 \fIchksum\fR \fB=\fR \fIdata\fR\fB\&.lookup_checksum(\fR\fIsolvid\fR\fB,\fR \fIkeyname\fR\fB)\fR
@@ -4681,7 +5070,7 @@ my \fI$chksum\fR \fB=\fR \fI$data\fR\fB\->lookup_checksum(\fR\fI$solvid\fR\fB,\f
 .RE
 .\}
 .sp
-Lookup functions\&. Return the data element stored in the specified solvable\&. The methods probably only make sense to retrive data from the special SOLVID_META solvid that stores repodata meta information\&.
+Lookup functions\&. Return the data element stored in the specified solvable\&. The methods probably only make sense to retrieve data from the special SOLVID_META solvid that stores repodata meta information\&.
 .SS "DATA STORAGE METHODS"
 .sp
 .if n \{\
@@ -4778,7 +5167,7 @@ my \fI$handle\fR \fB=\fR \fI$data\fR\fB\->new_handle()\fR;
 Data storage methods\&. Probably only useful to store data in the special SOLVID_META solvid that stores repodata meta information\&. Note that repodata areas can have their own Id pool (see the REPO_LOCALPOOL flag), so be careful if you need to store ids\&. Arrays are created by calling the add function for every element\&. A flexarray is an array of sub\-structures, call new_handle to create a new structure, use the handle as solvid to fill the structure with data and call add_flexarray to put the structure in an array\&.
 .SH "THE DATAPOS CLASS"
 .sp
-Datapos objects describe a specific position in the repository data area\&. Thus they are only valid until the repository is modified in some way\&. Datapos objects can be created by the pos() and parentpos() methods of a Datamatch object or by accesing the \(lqmeta\(rq attribute of a repository\&.
+Datapos objects describe a specific position in the repository data area\&. Thus they are only valid until the repository is modified in some way\&. Datapos objects can be created by the pos() and parentpos() methods of a Datamatch object or by accessing the \(lqmeta\(rq attribute of a repository\&.
 .SS "ATTRIBUTES"
 .sp
 .if n \{\
@@ -4786,7 +5175,7 @@ Datapos objects describe a specific position in the repository data area\&. Thus
 .\}
 .nf
 \fBRepo *repo;\fR                     /* read only */
-\fI$data\fR\fB\->{\*(Aqrepo\*(Aq}\fR
+\fI$data\fR\fB\->{repo}\fR
 \fIdata\fR\fB\&.repo\fR
 \fIdata\fR\fB\&.repo\fR
 .fi
@@ -4899,7 +5288,7 @@ my \fI$bool\fR \fB=\fR \fI$datapos\fR\fB\->lookup_void(\fR\fI$keyname\fR\fB)\fR;
 .RS 4
 .\}
 .nf
-\fBQueue lookup_idarray(Id\fR \fIkeyname\fR\fB)\fR
+\fBId *lookup_idarray(Id\fR \fIkeyname\fR\fB)\fR
 my \fI@ids\fR \fB=\fR \fI$datapos\fR\fB\->lookup_idarray(\fR\fI$keyname\fR\fB)\fR;
 \fIids\fR \fB=\fR \fIdatapos\fR\fB\&.lookup_idarray(\fR\fIkeyname\fR\fB)\fR
 \fIids\fR \fB=\fR \fIdatapos\fR\fB\&.lookup_idarray(\fR\fIkeyname\fR\fB)\fR
@@ -4912,7 +5301,7 @@ my \fI@ids\fR \fB=\fR \fI$datapos\fR\fB\->lookup_idarray(\fR\fI$keyname\fR\fB)\f
 .RS 4
 .\}
 .nf
-\fBChksum *lookup_checksum(Id\fR \fIkeyname\fR\fB)\fR
+\fBChksum lookup_checksum(Id\fR \fIkeyname\fR\fB)\fR
 my \fI$chksum\fR \fB=\fR \fI$datapos\fR\fB\->lookup_checksum(\fR\fI$keyname\fR\fB)\fR;
 \fIchksum\fR \fB=\fR \fIdatapos\fR\fB\&.lookup_checksum(\fR\fIkeyname\fR\fB)\fR
 \fIchksum\fR \fB=\fR \fIdatapos\fR\fB\&.lookup_checksum(\fR\fIkeyname\fR\fB)\fR