Index: AE/installer2/locales/net/oni2/aeinstaller/localization/MainWin_de.properties
===================================================================
--- AE/installer2/locales/net/oni2/aeinstaller/localization/MainWin_de.properties	(revision 659)
+++ AE/installer2/locales/net/oni2/aeinstaller/localization/MainWin_de.properties	(revision 660)
@@ -43,4 +43,5 @@
 radOnline.text=Online
 radLocal.text=Heruntergeladen
+lblShowFilter.text=Filter:
 lblDownloadSize.text=Größe der herunterzuladenden Dateien: 
 
Index: AE/installer2/locales/net/oni2/aeinstaller/localization/ModTable_de.properties
===================================================================
--- AE/installer2/locales/net/oni2/aeinstaller/localization/ModTable_de.properties	(revision 659)
+++ AE/installer2/locales/net/oni2/aeinstaller/localization/ModTable_de.properties	(revision 660)
@@ -6,4 +6,9 @@
 mod.added=Hinzugefügt
 mod.date=Letzte Änderung
+
+filterTo.ALL=Alles
+filterTo.NAME=Mod Name
+filterTo.CREATOR=Entwickler
+filterTo.DESCRIPTION=Beschreibung
 
 state.installed=Ist <b>I</b>nstalliert
Index: AE/installer2/src/net/oni2/aeinstaller/AEInstaller.properties
===================================================================
--- AE/installer2/src/net/oni2/aeinstaller/AEInstaller.properties	(revision 659)
+++ AE/installer2/src/net/oni2/aeinstaller/AEInstaller.properties	(revision 660)
@@ -1,2 +1,2 @@
 appname=AE Installer 2
-appversion=0.99j
+appversion=0.99k
Index: AE/installer2/src/net/oni2/aeinstaller/gui/MainWin.java
===================================================================
--- AE/installer2/src/net/oni2/aeinstaller/gui/MainWin.java	(revision 659)
+++ AE/installer2/src/net/oni2/aeinstaller/gui/MainWin.java	(revision 660)
@@ -7,4 +7,6 @@
 import java.awt.event.ItemEvent;
 import java.awt.event.ItemListener;
+import java.awt.event.KeyAdapter;
+import java.awt.event.KeyEvent;
 import java.io.File;
 import java.net.URL;
@@ -33,4 +35,5 @@
 import javax.swing.JScrollPane;
 import javax.swing.JSplitPane;
+import javax.swing.JTextField;
 import javax.swing.SwingUtilities;
 import javax.swing.ToolTipManager;
@@ -57,4 +60,5 @@
 import net.oni2.aeinstaller.gui.downloadwindow.Downloader;
 import net.oni2.aeinstaller.gui.modtable.DownloadSizeListener;
+import net.oni2.aeinstaller.gui.modtable.EApplyFilterTo;
 import net.oni2.aeinstaller.gui.modtable.ModSelectionListener;
 import net.oni2.aeinstaller.gui.modtable.ModTable;
@@ -94,4 +98,6 @@
 	private JRadioButton radOnline;
 	private JRadioButton radLocal;
+	private JTextField txtShowFilter;
+	private JComboBox cmbShowFilterTo;
 	private JScrollPane scrollMods;
 	private ModTable tblMods;
@@ -99,5 +105,5 @@
 
 	private PackageInfoBox pkgInfo;
-	
+
 	private JButton btnInstall;
 
@@ -142,4 +148,15 @@
 		lblDownloadSizeVal.setText(SizeFormatter.format(0, 2));
 		radAll.setSelected(true);
+
+		for (EApplyFilterTo f : EApplyFilterTo.values()) {
+			cmbShowFilterTo.addItem(f);
+		}
+		txtShowFilter.addKeyListener(new KeyAdapter() {
+			@Override
+			public void keyReleased(KeyEvent e) {
+				super.keyReleased(e);
+				updateTableFilter();
+			}
+		});
 
 		tblMods.addModSelectionListener(this);
@@ -716,15 +733,6 @@
 		if (radLocal.isSelected())
 			downloadState = 2;
-		tblMods.setFilter(t, downloadState);
-	}
-
-	@SuppressWarnings("unused")
-	private void modTypeSelection() {
-		updateTableFilter();
-	}
-
-	@SuppressWarnings("unused")
-	private void showTypeSelection() {
-		updateTableFilter();
+		tblMods.setFilter(t, downloadState, txtShowFilter.getText(),
+				(EApplyFilterTo) cmbShowFilterTo.getSelectedItem());
 	}
 
Index: AE/installer2/src/net/oni2/aeinstaller/gui/MainWin.yml
===================================================================
--- AE/installer2/src/net/oni2/aeinstaller/gui/MainWin.yml	(revision 659)
+++ AE/installer2/src/net/oni2/aeinstaller/gui/MainWin.yml	(revision 660)
@@ -51,10 +51,13 @@
         - JPanel(name=panMods):
             - JLabel(name=lblModTypes, text=lblModTypes.text)
-            - JComboBox(name=cmbModTypes, onAction=modTypeSelection)
+            - JComboBox(name=cmbModTypes, onAction=updateTableFilter)
             - JLabel(name=lblShowOnly, text=lblShowOnly.text)
-            - JRadioButton(name=radAll, text=radAll.text, onAction=showTypeSelection)
-            - JRadioButton(name=radOnline, text=radOnline.text, onAction=showTypeSelection)
-            - JRadioButton(name=radLocal, text=radLocal.text, onAction=showTypeSelection)
+            - JRadioButton(name=radAll, text=radAll.text, onAction=updateTableFilter)
+            - JRadioButton(name=radOnline, text=radOnline.text, onAction=updateTableFilter)
+            - JRadioButton(name=radLocal, text=radLocal.text, onAction=updateTableFilter)
             - ButtonGroup: [radAll,radOnline,radLocal]
+            - JLabel(name=lblShowFilter, text=lblShowFilter.text)
+            - JTextField(name=txtShowFilter)
+            - JComboBox(name=cmbShowFilterTo, onAction=updateTableFilter)
             - JScrollPane(name=scrollMods, vScrollBar=always, hScrollBar=never)
             - JButton(name=btnUnSelectAll, icon=img.unSelect16, text=btnUnSelectAll.text, onAction=[unSelectAll])
@@ -64,10 +67,11 @@
             - JLabel(name=lblDownloadSizeVal)
             - MigLayout: |
-                 [grow]
-                 lblModTypes<,cmbModTypes                        [min]
-                 lblShowOnly<,radAll,radOnline,radLocal          [min]
-                 scrollMods                                      [grow]
-                 >btnUnSelectAll,>btnRevertSelection,btnInstall  [min]
-                 lblDownloadSize,lblDownloadSizeVal              [min]
+                 [min]           [grow]
+                 >lblModTypes    cmbModTypes                       [min]
+                 >lblShowOnly    radAll,radOnline,radLocal         [min]
+                 >lblShowFilter  txtShowFilter>,cmbShowFilterTo<   [min]
+                 scrollMods+*                                      [grow]
+                 >btnUnSelectAll+*,>btnRevertSelection,btnInstall  [min]
+                 lblDownloadSize+*,lblDownloadSizeVal              [min]
         - PackageInfoBox(name=pkgInfo)
     - MigLayout:
Index: AE/installer2/src/net/oni2/aeinstaller/gui/modtable/EApplyFilterTo.java
===================================================================
--- AE/installer2/src/net/oni2/aeinstaller/gui/modtable/EApplyFilterTo.java	(revision 660)
+++ AE/installer2/src/net/oni2/aeinstaller/gui/modtable/EApplyFilterTo.java	(revision 660)
@@ -0,0 +1,36 @@
+package net.oni2.aeinstaller.gui.modtable;
+
+import java.util.ResourceBundle;
+
+/**
+ * @author Christian Illy
+ */
+public enum EApplyFilterTo {
+	/**
+	 * Filter on all fields
+	 */
+	ALL,
+	/**
+	 * Filter only on name field
+	 */
+	NAME,
+	/**
+	 * Filter only on creator field
+	 */
+	CREATOR,
+	/**
+	 * Filter only on description field
+	 */
+	DESCRIPTION;
+
+	private ResourceBundle bundle = ResourceBundle
+			.getBundle("net.oni2.aeinstaller.localization.ModTable");
+
+	/**
+	 * @return Name of Filter
+	 */
+	public String toString() {
+		return bundle.getString("filterTo." + super.toString());
+	}
+
+}
Index: AE/installer2/src/net/oni2/aeinstaller/gui/modtable/ModTable.java
===================================================================
--- AE/installer2/src/net/oni2/aeinstaller/gui/modtable/ModTable.java	(revision 659)
+++ AE/installer2/src/net/oni2/aeinstaller/gui/modtable/ModTable.java	(revision 660)
@@ -98,5 +98,5 @@
 		setRowSorter(sorter);
 
-		setFilter(null, 0);
+		setFilter(null, 0, null, EApplyFilterTo.ALL);
 
 		List<RowSorter.SortKey> sortKeys = new ArrayList<RowSorter.SortKey>();
@@ -221,8 +221,14 @@
 	 * @param downloadState
 	 *            Show only: 0 = all, 1 = online, 2 = downloaded
-	 */
-	public void setFilter(Type type, int downloadState) {
+	 * @param filterString
+	 *            String to filter on
+	 * @param filterTo
+	 *            Fields to use string filter on
+	 */
+	public void setFilter(Type type, int downloadState, String filterString,
+			EApplyFilterTo filterTo) {
 		sorter.setRowFilter(new ModTableFilter(type, downloadState,
-				contentType == ETableContentType.CORE, false));
+				filterString, filterTo, contentType == ETableContentType.CORE,
+				false));
 	}
 
@@ -378,4 +384,13 @@
 
 	private class KeyEventHandler extends KeyAdapter {
+		private void goToRow(int row) {
+			setRowSelectionInterval(row, row);
+			JViewport viewport = (JViewport) getParent();
+			Rectangle rect = getCellRect(row, 0, true);
+			Rectangle r2 = viewport.getVisibleRect();
+			scrollRectToVisible(new Rectangle(rect.x, rect.y,
+					(int) r2.getWidth(), (int) r2.getHeight()));
+		}
+
 		@Override
 		public void keyTyped(KeyEvent e) {
@@ -384,14 +399,21 @@
 			if (e.getModifiers() == 0) {
 				String key = String.valueOf(e.getKeyChar()).toLowerCase();
-				for (int i = 0; i < getRowCount(); i++) {
+				int row = getSelectedRow();
+				if (row == (getRowCount() - 1))
+					row = -1;
+				for (int i = row + 1; i < getRowCount(); i++) {
 					Package m = (Package) getValueAt(i, -1);
 					if (m.getName().toLowerCase().startsWith(key)) {
-						setRowSelectionInterval(i, i);
-						JViewport viewport = (JViewport) getParent();
-						Rectangle rect = getCellRect(i, 0, true);
-						Rectangle r2 = viewport.getVisibleRect();
-						scrollRectToVisible(new Rectangle(rect.x, rect.y,
-								(int) r2.getWidth(), (int) r2.getHeight()));
-						break;
+						goToRow(i);
+						return;
+					}
+				}
+				if (row > 0) {
+					for (int i = 0; i < row; i++) {
+						Package m = (Package) getValueAt(i, -1);
+						if (m.getName().toLowerCase().startsWith(key)) {
+							goToRow(i);
+							return;
+						}
 					}
 				}
Index: AE/installer2/src/net/oni2/aeinstaller/gui/modtable/ModTableFilter.java
===================================================================
--- AE/installer2/src/net/oni2/aeinstaller/gui/modtable/ModTableFilter.java	(revision 659)
+++ AE/installer2/src/net/oni2/aeinstaller/gui/modtable/ModTableFilter.java	(revision 660)
@@ -12,4 +12,6 @@
 	private Type type = null;
 	private int downloadState = 0;
+	private EApplyFilterTo filterTo = EApplyFilterTo.ALL;
+	private String filterString = null;
 
 	private boolean showCorePackages = false;
@@ -21,4 +23,8 @@
 	 * @param downloadState
 	 *            Show only: 0 = all, 1 = online, 2 = downloaded
+	 * @param filterString
+	 *            Filter for the given string
+	 * @param filterTo
+	 *            Use the string filter only on the named field
 	 * @param showCorePackages
 	 *            Show core packages in table
@@ -26,9 +32,13 @@
 	 *            Show packages not valid on this platform
 	 */
-	public ModTableFilter(Type type, int downloadState,
-			boolean showCorePackages, boolean showInvalidPlatform) {
+	public ModTableFilter(Type type, int downloadState, String filterString,
+			EApplyFilterTo filterTo, boolean showCorePackages,
+			boolean showInvalidPlatform) {
 		super();
 		this.type = type;
 		this.downloadState = downloadState;
+		if (filterString != null)
+			this.filterString = filterString.toLowerCase();
+		this.filterTo = filterTo;
 		this.showCorePackages = showCorePackages;
 		this.showInvalidPlatform = showInvalidPlatform;
@@ -58,4 +68,28 @@
 				break;
 		}
+		if (filterString != null && filterString.length() > 1) {
+			switch (filterTo) {
+				case ALL:
+					result &= mod.getName().toLowerCase()
+							.contains(filterString)
+							|| mod.getCreator().toLowerCase()
+									.contains(filterString)
+							|| mod.getDescription().toLowerCase()
+									.contains(filterString);
+					break;
+				case CREATOR:
+					result &= mod.getCreator().toLowerCase()
+							.contains(filterString);
+					break;
+				case DESCRIPTION:
+					result &= mod.getDescription().toLowerCase()
+							.contains(filterString);
+					break;
+				case NAME:
+					result &= mod.getName().toLowerCase()
+							.contains(filterString);
+					break;
+			}
+		}
 
 		return result;
Index: AE/installer2/src/net/oni2/aeinstaller/localization/MainWin.properties
===================================================================
--- AE/installer2/src/net/oni2/aeinstaller/localization/MainWin.properties	(revision 659)
+++ AE/installer2/src/net/oni2/aeinstaller/localization/MainWin.properties	(revision 660)
@@ -43,4 +43,5 @@
 radOnline.text=Online
 radLocal.text=Downloaded
+lblShowFilter.text=Filter:
 lblDownloadSize.text=Size of files to download: 
 
Index: AE/installer2/src/net/oni2/aeinstaller/localization/ModTable.properties
===================================================================
--- AE/installer2/src/net/oni2/aeinstaller/localization/ModTable.properties	(revision 659)
+++ AE/installer2/src/net/oni2/aeinstaller/localization/ModTable.properties	(revision 660)
@@ -6,4 +6,9 @@
 mod.added=Added
 mod.date=Last change
+
+filterTo.ALL=All
+filterTo.NAME=Mod name
+filterTo.CREATOR=Creator
+filterTo.DESCRIPTION=Description
 
 state.installed=Is <b>I</b>nstalled
