Index: applications/editors/josm/plugins/terracer/src/terracer/HouseNumberInputDialog.java
===================================================================
--- applications/editors/josm/plugins/terracer/src/terracer/HouseNumberInputDialog.java	(revision 29622)
+++ applications/editors/josm/plugins/terracer/src/terracer/HouseNumberInputDialog.java	(revision 29623)
@@ -19,4 +19,5 @@
 import java.util.ArrayList;
 import java.util.Iterator;
+import java.util.List;
 import java.util.TreeSet;
 
@@ -34,4 +35,5 @@
 import org.openstreetmap.josm.gui.ExtendedDialog;
 import org.openstreetmap.josm.gui.tagging.ac.AutoCompletingComboBox;
+import org.openstreetmap.josm.gui.tagging.ac.AutoCompletionListItem;
 import org.openstreetmap.josm.tools.GBC;
 
@@ -59,4 +61,5 @@
     //final private Way street;
     final private String streetName;
+    final private String buildingType;
     final private boolean relationExists;
     final ArrayList<Node> housenumbers;
@@ -74,4 +77,6 @@
     private JLabel streetLabel;
     AutoCompletingComboBox streetComboBox;
+    private JLabel buildingLabel;
+    AutoCompletingComboBox buildingComboBox;
     private JLabel segmentsLabel;
     JTextField segments;
@@ -90,8 +95,9 @@
      *        street line or the house numbers which are guaranteed to have the
      *        same name attached (may be null)
+     * @param buildingType The value to add for building key
      * @param relationExists If the buildings can be added to an existing relation or not.
      * @param housenumbers a list of house numbers in this outline (may be empty)
      */
-    public HouseNumberInputDialog(HouseNumberInputHandler handler, Way street, String streetName, boolean relationExists, ArrayList<Node> housenumbers) {
+    public HouseNumberInputDialog(HouseNumberInputHandler handler, Way street, String streetName, String buildingType, boolean relationExists, ArrayList<Node> housenumbers) {
         super(Main.parent,
                 tr("Terrace a house"),
@@ -102,4 +108,5 @@
         //this.street = street;
         this.streetName = streetName;
+        this.buildingType = buildingType;
         this.relationExists = relationExists;
         this.housenumbers = housenumbers;
@@ -163,18 +170,13 @@
             messageLabel.setFocusable(false); // Needed so that lowest number can have focus immediately
 
-            interpolationLabel = new JLabel();
-            interpolationLabel.setText(tr("Interpolation"));
-            segmentsLabel = new JLabel();
-            segmentsLabel.setText(tr("Segments"));
-            streetLabel = new JLabel();
-            streetLabel.setText(tr("Street"));
-            loLabel = new JLabel();
-            loLabel.setText(tr("Lowest Number"));
+            interpolationLabel = new JLabel(tr("Interpolation"));
+            segmentsLabel = new JLabel(tr("Segments"));
+            streetLabel = new JLabel(tr("Street"));
+            buildingLabel = new JLabel(tr("Building"));
+            loLabel = new JLabel(tr("Lowest Number"));
             loLabel.setPreferredSize(new Dimension(111, 16));
             loLabel.setToolTipText(tr("Lowest housenumber of the terraced house"));
-            hiLabel = new JLabel();
-            hiLabel.setText(tr("Highest Number"));
-            numbersLabel = new JLabel();
-            numbersLabel.setText(tr("List of Numbers"));
+            hiLabel = new JLabel(tr("Highest Number"));
+            numbersLabel = new JLabel(tr("List of Numbers"));
             loLabel.setPreferredSize(new Dimension(111, 16));
             final String txt = relationExists ? tr("add to existing associatedStreet relation") : tr("create an associatedStreet relation");
@@ -204,4 +206,10 @@
             } else {
                 inputPanel.add(new JLabel(tr("Street name: ")+"\""+streetName+"\""), GBC.eol().insets(3,3,0,0));
+            }
+            if (buildingType == null) {
+                inputPanel.add(buildingLabel, GBC.std().insets(3,3,0,0));
+                inputPanel.add(getBuilding(), GBC.eol().insets(5,3,0,0));
+            } else {
+                inputPanel.add(new JLabel(tr("Building: ")+"\""+buildingType+"\""), GBC.eol().insets(3,3,0,0));
             }
             inputPanel.add(handleRelationCheckBox, GBC.eol().insets(3,3,0,0));
@@ -290,5 +298,5 @@
      * This method initializes street
      *
-     * @return javax.swing.JTextField
+     * @return AutoCompletingComboBox
      */
     private AutoCompletingComboBox getStreet() {
@@ -304,4 +312,23 @@
         }
         return streetComboBox;
+    }
+    
+    /**
+     * This method initializes building
+     *
+     * @return AutoCompletingComboBox
+     */
+    private AutoCompletingComboBox getBuilding() {
+
+        if (buildingComboBox == null) {
+            final List<AutoCompletionListItem> values = Main.main.getCurrentDataSet().getAutoCompletionManager().getValues("building");
+
+            buildingComboBox = new AutoCompletingComboBox();
+            buildingComboBox.setPossibleACItems(values);
+            buildingComboBox.setEditable(true);
+            buildingComboBox.setSelectedItem("yes");
+
+        }
+        return buildingComboBox;
     }
 
Index: applications/editors/josm/plugins/terracer/src/terracer/HouseNumberInputHandler.java
===================================================================
--- applications/editors/josm/plugins/terracer/src/terracer/HouseNumberInputHandler.java	(revision 29622)
+++ applications/editors/josm/plugins/terracer/src/terracer/HouseNumberInputHandler.java	(revision 29623)
@@ -31,4 +31,5 @@
 import org.openstreetmap.josm.data.osm.Relation;
 import org.openstreetmap.josm.data.osm.Way;
+import org.openstreetmap.josm.gui.tagging.ac.AutoCompletingComboBox;
 import org.openstreetmap.josm.gui.tagging.ac.AutoCompletionListItem;
 
@@ -48,4 +49,5 @@
     private final Way outline, street;
     private final String streetName;
+    private final String buildingType;
     private final Node init;
     private final Relation associatedStreet;
@@ -63,4 +65,5 @@
      *            the house numbers which are guaranteed to have the same name
      *            attached (may be null)
+     * @param buildingType The value to add for building key
      * @param associatedStreet a relation where we can add the houses (may be null)
      * @param housenumbers a list of house number nodes in this outline (may be empty)
@@ -68,5 +71,5 @@
      */
     public HouseNumberInputHandler(final TerracerAction terracerAction,
-            final Way outline, final Node init, final Way street, final String streetName,
+            final Way outline, final Node init, final Way street, final String streetName, final String buildingType,
             final Relation associatedStreet,
             final ArrayList<Node> housenumbers, final String title) {
@@ -76,9 +79,10 @@
         this.street = street;
         this.streetName = streetName;
+        this.buildingType = buildingType;
         this.associatedStreet = associatedStreet;
         this.housenumbers = housenumbers;
 
         // This dialog is started modal
-        this.dialog = new HouseNumberInputDialog(this, street, streetName,
+        this.dialog = new HouseNumberInputDialog(this, street, streetName, buildingType,
                 associatedStreet != null, housenumbers);
 
@@ -318,5 +322,5 @@
                             streetName(),
                             doHandleRelation(),
-                            doDeleteOutline());
+                            doDeleteOutline(), buildingType());
                     } catch (UserCancelException ex) {
                         // Ignore
@@ -393,5 +397,21 @@
             return streetName;
 
-        Object selected = dialog.streetComboBox.getSelectedItem();
+        return getItemText(dialog.streetComboBox);
+    }
+    
+    /**
+     * Gets the building type.
+     *
+     * @return the building type or null, if not set / invalid.
+     */
+    public String buildingType() {
+        if (buildingType != null)
+            return buildingType;
+
+        return getItemText(dialog.buildingComboBox);
+    }
+    
+    private static String getItemText(AutoCompletingComboBox box) {
+        Object selected = box.getSelectedItem();
         if (selected == null) {
             return null;
Index: applications/editors/josm/plugins/terracer/src/terracer/TerracerAction.java
===================================================================
--- applications/editors/josm/plugins/terracer/src/terracer/TerracerAction.java	(revision 29622)
+++ applications/editors/josm/plugins/terracer/src/terracer/TerracerAction.java	(revision 29623)
@@ -221,5 +221,5 @@
             // Don't open the dialog
             try {
-                terraceBuilding(outline, init, street, associatedStreet, 0, null, null, 0, housenumbers, streetname, associatedStreet != null, false);
+                terraceBuilding(outline, init, street, associatedStreet, 0, null, null, 0, housenumbers, streetname, associatedStreet != null, false, "yes");
             } catch (UserCancelException ex) {
                 // Ignore
@@ -231,5 +231,5 @@
             String title = trn("Change {0} object", "Change {0} objects", sel.size(), sel.size());
             // show input dialog.
-            new HouseNumberInputHandler(this, outline, init, street, streetname,
+            new HouseNumberInputHandler(this, outline, init, street, streetname, null,
                     associatedStreet, housenumbers, title);
         }
@@ -312,4 +312,5 @@
      *        existing relation
      * @param deleteOutline If the outline way should be deleted when done
+     * @param buildingValue The value for {@code building} key to add
      * @throws UserCancelException 
      */
@@ -325,5 +326,5 @@
                 String streetName,
                 boolean handleRelations,
-                boolean deleteOutline) throws UserCancelException {
+                boolean deleteOutline, String buildingValue) throws UserCancelException {
         final int nb;
         Integer to = null, from = null;
@@ -397,5 +398,5 @@
                 TagCollection.from(outline).applyTo(terr);
                 ways.add(addressBuilding(terr, street, streetName, associatedStreet, housenumbers, i, 
-                        from != null ? Integer.toString(from + i * step) : null));
+                        from != null ? Integer.toString(from + i * step) : null, buildingValue));
                 
                 this.commands.add(new AddCommand(terr));
@@ -417,5 +418,5 @@
         } else {
             // Single building, just add the address details
-            ways.add(addressBuilding(outline, street, streetName, associatedStreet, housenumbers, 0, From));
+            ways.add(addressBuilding(outline, street, streetName, associatedStreet, housenumbers, 0, From, buildingValue));
         }
 
@@ -473,8 +474,9 @@
      * @param streetName the name of a street (may be null). Used if not null and street is null.
      * @param associatedStreet The associated street. Used to determine if addr:street should be set or not.
+     * @param buildingValue The value for {@code building} key to add
      * @return {@code outline}
      * @throws UserCancelException 
      */
-    private Way addressBuilding(Way outline, Way street, String streetName, Relation associatedStreet, ArrayList<Node> housenumbers, int i, String defaultNumber) throws UserCancelException {
+    private Way addressBuilding(Way outline, Way street, String streetName, Relation associatedStreet, ArrayList<Node> housenumbers, int i, String defaultNumber, String buildingValue) throws UserCancelException {
         Node houseNum = (housenumbers != null && i >= 0 && i < housenumbers.size()) ? housenumbers.get(i) : null;
         boolean buildingAdded = false;
@@ -498,5 +500,5 @@
         }
         if (!outline.hasKey("building") && !buildingAdded) {
-            this.commands.add(new ChangePropertyCommand(outline, "building", "yes"));
+            this.commands.add(new ChangePropertyCommand(outline, "building", buildingValue));
         }
         if (defaultNumber != null && !numberAdded) {
