Index: /applications/editors/josm/plugins/buildings_tools/src/buildings_tools/AdvancedSettingsDialog.java
===================================================================
--- /applications/editors/josm/plugins/buildings_tools/src/buildings_tools/AdvancedSettingsDialog.java	(revision 22903)
+++ /applications/editors/josm/plugins/buildings_tools/src/buildings_tools/AdvancedSettingsDialog.java	(revision 22904)
@@ -2,22 +2,24 @@
 
 import static org.openstreetmap.josm.tools.I18n.tr;
-import static buildings_tools.BuildingSizeDialog.addLabelled;
 
 import java.awt.GridBagLayout;
 import java.awt.Insets;
+import java.util.Map.Entry;
 
 import javax.swing.JCheckBox;
+import javax.swing.JLabel;
 import javax.swing.JPanel;
-import javax.swing.JTextField;
 
 import org.openstreetmap.josm.Main;
 import org.openstreetmap.josm.gui.ExtendedDialog;
+import org.openstreetmap.josm.gui.tagging.TagEditorModel;
+import org.openstreetmap.josm.gui.tagging.TagEditorPanel;
 import org.openstreetmap.josm.tools.GBC;
 
 public class AdvancedSettingsDialog extends ExtendedDialog {
-	// TODO: Replace tag textbox to full-fledged tag editor
-	JTextField tBTag = new JTextField();
-	JCheckBox cBigMode = new JCheckBox(tr("Big buildings mode"));
-	JCheckBox cSoftCur = new JCheckBox(tr("Rotate crosshair"));
+	private TagEditorModel tagsModel = new TagEditorModel();
+
+	private JCheckBox cBigMode = new JCheckBox(tr("Big buildings mode"));
+	private JCheckBox cSoftCur = new JCheckBox(tr("Rotate crosshair"));
 
 	public AdvancedSettingsDialog() {
@@ -29,19 +31,21 @@
 
 		final JPanel panel = new JPanel(new GridBagLayout());
-		addLabelled(panel, tr("Building tag:"), tBTag);
+		panel.add(new JLabel(tr("Buildings tags:")), GBC.eol().fill(GBC.HORIZONTAL));
+
+		for (Entry<String, String> entry : ToolSettings.getTags().entrySet()) {
+			tagsModel.add(entry.getKey(), entry.getValue());
+		}
+		panel.add(new TagEditorPanel(tagsModel), GBC.eop().fill(GBC.BOTH));
+
 		panel.add(cBigMode, GBC.eol().fill(GBC.HORIZONTAL));
 		panel.add(cSoftCur, GBC.eol().fill(GBC.HORIZONTAL));
 
-		tBTag.setText(ToolSettings.getTag());
 		cBigMode.setSelected(ToolSettings.isBBMode());
 		cSoftCur.setSelected(ToolSettings.isSoftCursor());
 
 		setContent(panel);
+
 		setupDialog();
 		setVisible(true);
-	}
-
-	public String getTag() {
-		return tBTag.getText();
 	}
 
@@ -55,5 +59,5 @@
 
 	public void saveSettings() {
-		ToolSettings.setTag(getTag());
+		tagsModel.applyToTags(ToolSettings.getTags());
 		ToolSettings.setBBMode(isBBMode());
 		ToolSettings.setSoftCursor(isSoftCursor());
Index: /applications/editors/josm/plugins/buildings_tools/src/buildings_tools/Building.java
===================================================================
--- /applications/editors/josm/plugins/buildings_tools/src/buildings_tools/Building.java	(revision 22903)
+++ /applications/editors/josm/plugins/buildings_tools/src/buildings_tools/Building.java	(revision 22904)
@@ -248,5 +248,5 @@
 		}
 		w.addNode(nodes[0]);
-		w.put("building", ToolSettings.getTag());
+		w.setKeys(ToolSettings.getTags());
 		Collection<Command> cmds = new LinkedList<Command>();
 		for (int i = 0; i < 4; i++) {
Index: /applications/editors/josm/plugins/buildings_tools/src/buildings_tools/DrawBuildingAction.java
===================================================================
--- /applications/editors/josm/plugins/buildings_tools/src/buildings_tools/DrawBuildingAction.java	(revision 22903)
+++ /applications/editors/josm/plugins/buildings_tools/src/buildings_tools/DrawBuildingAction.java	(revision 22904)
@@ -42,5 +42,5 @@
 @SuppressWarnings("serial")
 public class DrawBuildingAction extends MapMode implements MapViewPaintable, AWTEventListener, SelectionChangedListener {
-	enum Mode {
+	private enum Mode {
 		None, Drawing, DrawingWidth, DrawingAngFix
 	}
@@ -65,6 +65,6 @@
 		super(tr("Draw buildings"), "building", tr("Draw buildings"),
 				Shortcut.registerShortcut("mapmode:buildings",
-				tr("Mode: {0}", tr("Draw buildings")),
-				KeyEvent.VK_W, Shortcut.GROUP_EDIT),
+						tr("Mode: {0}", tr("Draw buildings")),
+						KeyEvent.VK_W, Shortcut.GROUP_EDIT),
 				mapFrame, getCursor());
 
@@ -134,5 +134,5 @@
 		Main.map.mapView.addMouseMotionListener(this);
 		Main.map.mapView.addTemporaryLayer(this);
-		DataSet.selListeners.add(this);
+		DataSet.addSelectionListener(this);
 		updateSnap(getCurrentDataSet().getSelected());
 		try {
@@ -148,5 +148,5 @@
 		Main.map.mapView.removeMouseMotionListener(this);
 		Main.map.mapView.removeTemporaryLayer(this);
-		DataSet.selListeners.remove(this);
+		DataSet.removeSelectionListener(this);
 		try {
 			Toolkit.getDefaultToolkit().removeAWTEventListener(this);
Index: /applications/editors/josm/plugins/buildings_tools/src/buildings_tools/ToolSettings.java
===================================================================
--- /applications/editors/josm/plugins/buildings_tools/src/buildings_tools/ToolSettings.java	(revision 22903)
+++ /applications/editors/josm/plugins/buildings_tools/src/buildings_tools/ToolSettings.java	(revision 22904)
@@ -1,3 +1,6 @@
 package buildings_tools;
+
+import java.util.HashMap;
+import java.util.Map;
 
 import org.openstreetmap.josm.Main;
@@ -7,6 +10,10 @@
 	private static double lenstep = 0;
 	private static boolean useAddr;
-	private static String tag = "yes";
+	private static final Map<String, String> tags = new HashMap<String, String>();
 	private static boolean autoSelect;
+
+	static {
+		tags.put("building", "yes");
+	}
 
 	public static void setAddrDialog(boolean _useAddr) {
@@ -31,10 +38,6 @@
 	}
 
-	public static void setTag(String newtag) {
-		tag = newtag;
-	}
-
-	public static String getTag() {
-		return tag;
+	public static Map<String, String> getTags() {
+		return tags;
 	}
 
