diff --git a/bin/is b/bin/is
index e87d83c3564caebe84c8c390953b6299c5862a89..50c2651f796036eab3a0b040cb16ef1f16f7c4f6 100755
--- a/bin/is
+++ b/bin/is
@@ -221,7 +221,10 @@ def c_search(parser, args):
     '''
     Search in repository
     '''
-    raise NotImplementedError("Not yet implemented")
+    repoman = load_repositories(args)
+    for repo in repoman:
+        arrow(repo.config.name)
+        repo.search(args.pattern)
 
 def c_get(parser, args):
     '''
@@ -351,6 +354,7 @@ p_cat.set_defaults(func=c_cat)
 
 # search command parser
 p_search = subparsers.add_parser("search", help=c_search.__doc__.lower())
+p_search.add_argument("pattern", help="search pattern in repository")
 p_search.set_defaults(func=c_search)
 
 # get command parser
diff --git a/installsystems/repository.py b/installsystems/repository.py
index 84ca421506c007107d34c32a4f9a25c5ee13a485..5579fdbe0924a852a1940af67b9527a34ca38bf4 100644
--- a/installsystems/repository.py
+++ b/installsystems/repository.py
@@ -202,6 +202,22 @@ class Repository(object):
                     out('    #yellow#MD5:#reset# %s' % payload_md5)
                 out()
 
+    def search(self, pattern):
+        '''
+        Search pattern in a repository
+        '''
+        images = self.db.ask("SELECT name, version, author, description\
+                              FROM image\
+                              WHERE name LIKE ? OR\
+                              description LIKE ? OR\
+                              author LIKE ?",
+                             tuple( ["%%%s%%" % pattern ] * 3)
+                             ).fetchall()
+        for name, version, author, description in images:
+            arrow("%s v%s" % (name, version), 1)
+            out("   #yellow#Author:#reset# %s" % author)
+            out("   #yellow#Description:#reset# %s" % description)
+
     def _remove_file(self, filename):
         '''
         Remove a filename from pool. Check if it's not needed by db before