diff --git a/installsystems/database.py b/installsystems/database.py
index 597f4248eb2a99638497241d6ba278d43469b65f..e5adffbffa769d3a342484b5772b83302dedfaa1 100644
--- a/installsystems/database.py
+++ b/installsystems/database.py
@@ -128,35 +128,3 @@ class Database(object):
             os.rename(newdb_path, self.path)
         except Exception as e:
             raise Exception("Removing metadata fail: %s" % e)
-
-    def databalls(self, name, version):
-        '''List data tarballs filenames'''
-        try:
-            self.file.seek(0)
-            db = Tarball.open(fileobj=self.file, mode='r:gz')
-            jdesc = json.loads(db.get_str("%s-%s.json" % (name, version)))
-            db.close()
-            return jdesc["data"]
-        except Exception as e:
-            raise Exception("List data tarballs fail: %s" % e)
-
-    def find(self, name, version=None):
-        '''Find last version of an image'''
-        try:
-            self.file.seek(0)
-            tarb = Tarball.open(fileobj=self.file, mode='r:gz')
-            candidates = [ int((os.path.splitext(tpname)[0]).rsplit("-", 1)[1])
-                           for tpname in tarb.getnames("%s-\d+" % name) ]
-            tarb.close()
-        except Exception as e:
-            raise Exception("Find in db %s fail: %s" % (self.path, e))
-        # no candidates => go west
-        if len(candidates) == 0:
-            return None
-        # get last version
-        if version is None:
-            version = max(candidates)
-        # check if version exists
-        if int(version) not in candidates:
-            return None
-        return self.get(name, version)
diff --git a/installsystems/image.py b/installsystems/image.py
index 5115b6c8b6233903ef3f2d653c572eb0b8762e7d..48c24998c7b665d7c0a027a5627a23f24e4f7433 100644
--- a/installsystems/image.py
+++ b/installsystems/image.py
@@ -293,6 +293,12 @@ class PackageImage(Image):
         # FIXME: we should check valid information here
         return desc
 
+    def data_path(self, name):
+        '''Return a data filename from its internal name'''
+        if self.md5name:
+            return os.path.join(self.base_path, self._metadata["data"][name]["md5"])
+        return os.path.join(self.base_path, "%s-%s%s" % (self.id, name, self.extension_data))
+
     @property
     def tarballs(self):
         '''List path of all related tarballs'''
@@ -300,15 +306,10 @@ class PackageImage(Image):
         name = os.path.join(self.base_path, self.md5) if self.md5name else self.path
         d_d[name] = {"md5": self.md5, "size": self.size}
         for key, value in self._metadata["data"].items():
-            if self.md5name:
-                name = os.path.join(self.base_path, value["md5"])
-            else:
-                name = os.path.join(self.base_path,
-                                    "%s-%s%s" % (self.id, key, self.extension_data))
-            d_d[name] = {"md5": value["md5"], "size": value["size"]}
+            d_d[self.data_path(key)] = {"md5": value["md5"], "size": value["size"]}
         return d_d
 
-    def tarcheck(self, message="Check MD5"):
+    def check(self, message="Check MD5"):
         '''Check md5 and size of tarballs are correct'''
         arrow(message, 1, self.verbose)
         # open  /dev/null
@@ -368,33 +369,18 @@ class PackageImage(Image):
         # tarball info
         tinfo = self._metadata["data"][dataname]
         # build data tar paths
-        paths = [ os.path.join(self.base_path, tinfo["md5"]),
-                  os.path.join(self.base_path, "%s-%s%s" % (self.id,
-                                                            dataname,
-                                                            self.extension_data)) ]
-        # try to open path
-        fo = None
-        for path in paths:
-            try:
-                fo = istools.uopen(path)
-                break
-            except Exception:
-                pass
-        # error if no file is openned
-        if fo is None:
-            raise Exception("Unable to open data tarball")
+        path = self.data_path(dataname)
+        try:
+            fo = istools.uopen(path)
+        except Exception as e:
+            raise Exception("Unable to open data tarball %s" % path)
         try:
             # create tar object
             t = Tarball.open(fileobj=fo, mode="r|gz")
         except Exception as e:
             raise Exception("Invalid data tarball: %s" % e)
         # filter on file to extact
-        if filelist is not None:
-            members = []
-            for fi in filelist:
-                members += t.gettarinfo(name)
-        else:
-            members = None
+        members = None if filelist is None else [ t.gettarinfo(name) for name in filelist ]
         try:
             t.extractall(target, members)
         except Exception as e:
diff --git a/installsystems/repository.py b/installsystems/repository.py
index 8f9d41953268cc7823b2743f76ea5c9ecc8ff881..b22fb419d956cdef3055054742837c3eb6df8d31 100644
--- a/installsystems/repository.py
+++ b/installsystems/repository.py
@@ -83,7 +83,7 @@ class Repository(object):
         if istools.pathtype(self.config.path) != "file":
             raise NotImplementedError("Repository addition must be local")
         # checking data tarballs md5 before copy
-        package.tarcheck("Check tarballs before copy")
+        package.check("Check tarballs before copy")
         # adding file to repository
         arrow("Copying files", 1, self.verbose)
         for src,value in package.tarballs.items():
@@ -98,7 +98,7 @@ class Repository(object):
         r_package = PackageImage(os.path.join(self.config.path, package.md5),
                                  md5name=True, verbose=self.verbose)
         # checking data tarballs md5 after copy
-        r_package.tarcheck("Check tarballs after copy")
+        r_package.check("Check tarballs after copy")
         # add description to db
         self.db.add(r_package)
         # update last file
@@ -138,15 +138,14 @@ class Repository(object):
 
     def get(self, name, version):
         '''return a package from a name and version of pakage'''
-        debug("Getting %s v%s" % (name, version))
         # get file md5 from db
         r = self.db.ask("select md5 from image where name = ? and version = ? limit 1",
                         (name,version)).fetchone()
         if r is None:
             raise Exception("No such image %s version %s" % name, version)
-        return PackageImage(os.path.join(self.config.path, r[0]),
-                            md5name=True,
-                            verbose=self.verbose)
+        path = os.path.join(self.config.path, r[0])
+        debug("Getting %s v%s from %s" % (name, version, path))
+        return PackageImage(path, md5name=True, verbose=self.verbose)
 
     def last(self, name):
         '''Return last version of name in repo or -1 if not found'''