diff --git a/pom.xml b/pom.xml
index 08adc63..2ed5929 100644
--- a/pom.xml
+++ b/pom.xml
@@ -35,4 +35,11 @@
             </plugin>
         </plugins>
     </build>
+    <dependencies>
+        <dependency>
+            <groupId>org.jsoup</groupId>
+            <artifactId>jsoup</artifactId>
+            <version>1.14.2</version>
+        </dependency>
+    </dependencies>
 </project>
\ No newline at end of file
diff --git a/src/main/java/moe/nekojimi/musicsearcher/Main.java b/src/main/java/moe/nekojimi/musicsearcher/Main.java
index 17ac700..c438b64 100644
--- a/src/main/java/moe/nekojimi/musicsearcher/Main.java
+++ b/src/main/java/moe/nekojimi/musicsearcher/Main.java
@@ -3,7 +3,7 @@
  * To change this template file, choose Tools | Templates
  * and open the template in the editor.
  */
-package moe.nekojimi.javamaventemplate;
+package moe.nekojimi.musicsearcher;
 
 /**
  *
diff --git a/src/main/java/moe/nekojimi/musicsearcher/Result.java b/src/main/java/moe/nekojimi/musicsearcher/Result.java
new file mode 100644
index 0000000..9e1becf
--- /dev/null
+++ b/src/main/java/moe/nekojimi/musicsearcher/Result.java
@@ -0,0 +1,14 @@
+/*
+ * To change this license header, choose License Headers in Project Properties.
+ * To change this template file, choose Tools | Templates
+ * and open the template in the editor.
+ */
+package moe.nekojimi.musicsearcher;
+
+/**
+ *
+ * @author jim
+ */
+public class Result {
+    
+}
diff --git a/src/main/java/moe/nekojimi/musicsearcher/providers/MetaSearcher.java b/src/main/java/moe/nekojimi/musicsearcher/providers/MetaSearcher.java
new file mode 100644
index 0000000..8952adc
--- /dev/null
+++ b/src/main/java/moe/nekojimi/musicsearcher/providers/MetaSearcher.java
@@ -0,0 +1,32 @@
+/*
+ * To change this license header, choose License Headers in Project Properties.
+ * To change this template file, choose Tools | Templates
+ * and open the template in the editor.
+ */
+package moe.nekojimi.musicsearcher.providers;
+
+import java.util.List;
+import java.util.Set;
+import moe.nekojimi.musicsearcher.Result;
+
+/**
+ *
+ * @author jim
+ */
+public class MetaSearcher extends Searcher
+{
+    
+    private final Set<Searcher> searchers;
+
+    public MetaSearcher() 
+    {
+        super("meta");
+    }
+
+    @Override
+    public List<Result> search(String query) 
+    {
+        throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
+    }
+    
+}
diff --git a/src/main/java/moe/nekojimi/musicsearcher/providers/Searcher.java b/src/main/java/moe/nekojimi/musicsearcher/providers/Searcher.java
new file mode 100644
index 0000000..41055fa
--- /dev/null
+++ b/src/main/java/moe/nekojimi/musicsearcher/providers/Searcher.java
@@ -0,0 +1,59 @@
+/*
+ * To change this license header, choose License Headers in Project Properties.
+ * To change this template file, choose Tools | Templates
+ * and open the template in the editor.
+ */
+package moe.nekojimi.musicsearcher.providers;
+
+import java.util.List;
+import java.util.concurrent.ExecutionException;
+import java.util.concurrent.ForkJoinPool;
+import java.util.concurrent.Future;
+import java.util.concurrent.FutureTask;
+import java.util.concurrent.TimeUnit;
+import java.util.concurrent.TimeoutException;
+import moe.nekojimi.musicsearcher.Result;
+
+/**
+ *
+ * @author jim
+ */
+public abstract class Searcher 
+{
+    private final String name;
+    private final ForkJoinPool executor;
+
+    public Searcher(String name) 
+    {
+        this.name = name;
+        this.executor = new ForkJoinPool();
+    }
+    
+    public List<Result> searchAndWait(String query) throws InterruptedException, ExecutionException
+    {
+        try 
+        {
+            return searchAndWait(query, Long.MAX_VALUE, TimeUnit.DAYS);
+        } catch (TimeoutException ex) 
+        {
+            throw new RuntimeException("This should never happen!",ex);
+        }
+    }
+    
+    public List<Result> searchAndWait(String query, long limit, TimeUnit unit) throws InterruptedException, ExecutionException, TimeoutException
+    {
+        return search(query).get(limit, unit);
+    }
+    
+    public Future<List<Result>> search(String query)
+    {
+        FutureTask<List<Result>> task = new FutureTask<>(() -> 
+        {
+            return doSearch(query);
+        });
+        executor.execute(task);
+        return task;
+    }
+
+    protected abstract List<Result> doSearch(String query);
+}
diff --git a/src/main/java/moe/nekojimi/musicsearcher/providers/WebScraperSearcher.java b/src/main/java/moe/nekojimi/musicsearcher/providers/WebScraperSearcher.java
new file mode 100644
index 0000000..4b94682
--- /dev/null
+++ b/src/main/java/moe/nekojimi/musicsearcher/providers/WebScraperSearcher.java
@@ -0,0 +1,37 @@
+/*
+ * To change this license header, choose License Headers in Project Properties.
+ * To change this template file, choose Tools | Templates
+ * and open the template in the editor.
+ */
+package moe.nekojimi.musicsearcher.providers;
+
+import java.util.List;
+import moe.nekojimi.musicsearcher.Result;
+import org.jsoup.Jsoup;
+
+/**
+ *
+ * @author jim
+ */
+public class WebScraperSearcher extends Searcher
+{
+    private String searchUrl;
+    
+    private String resultItem;
+    private String artistItem;
+    private String titleItem;
+    private String linkHrefItem;
+    private String albumArtistItem;
+
+    public WebScraperSearcher(String name)
+    {
+        super(name);
+    }
+
+    @Override
+    protected List<Result> doSearch(String query) 
+    {
+        Jsoup.
+    }
+    
+}