diff --git a/Sources/app/src/main/java/com/furwaz/roomview/BuildingActivity.java b/Sources/app/src/main/java/com/furwaz/roomview/BuildingActivity.java
index 0cd6e34c53c2d757f147c94235fe0a89c9f264ee..0a12b2cbe593d422f6124d0324944026da170c76 100644
--- a/Sources/app/src/main/java/com/furwaz/roomview/BuildingActivity.java
+++ b/Sources/app/src/main/java/com/furwaz/roomview/BuildingActivity.java
@@ -12,6 +12,7 @@ import android.view.View;
 import android.widget.Button;
 import android.widget.EditText;
 import android.widget.ImageButton;
+import android.widget.ImageView;
 import android.widget.LinearLayout;
 import android.widget.ListView;
 import android.widget.SearchView;
@@ -23,12 +24,14 @@ import java.util.Date;
 
 import Common.BuildingManager;
 import Common.InfoBinding;
+import Popups.BuildingPopup;
+import Popups.RoomPopup;
 import Structures.BuildingInfo;
 import Structures.RoomInfo;
 import Views.InfoAdapter;
 
 public class BuildingActivity extends AppCompatActivity {
-    InfoAdapter room_adapter = null;
+    InfoAdapter<RoomInfo> room_adapter = null;
     BuildingInfo building;
 
     @Override
@@ -46,7 +49,7 @@ public class BuildingActivity extends AppCompatActivity {
         ListView room_lv = findViewById(R.id.room_list);
         LinearLayout noDataLayout = findViewById(R.id.no_room_layout);
 
-        room_adapter = new InfoAdapter(this, building.getRooms(), noDataLayout, R.layout.room_tile);
+        room_adapter = new InfoAdapter<RoomInfo>(this, building.getRooms(), noDataLayout, R.layout.room_tile);
         room_lv.setAdapter(room_adapter);
 
         room_adapter.setOnRemoveListener(param -> {
@@ -85,9 +88,10 @@ public class BuildingActivity extends AppCompatActivity {
         });
 
         ImageButton add_btn = findViewById(R.id.add_room_btn);
-        add_btn.setOnClickListener(view -> {
-            showAddRoomPopup(view);
-        });
+        add_btn.setOnClickListener(this::showAddRoomPopup);
+
+        ImageButton edit_btn = findViewById(R.id.edit_building_name);
+        edit_btn.setOnClickListener(view -> showEditPopup());
 
         TextView building_tv_name = findViewById(R.id.building_name);
         building_tv_name.setText(building.getName());
@@ -99,51 +103,48 @@ public class BuildingActivity extends AppCompatActivity {
         room_adapter.setData(building.getRooms());
     }
 
+    protected void showEditPopup() {
+        new BuildingPopup(
+            BuildingActivity.this,
+            param -> {
+                ((BuildingPopup) param).getInput().setText(building.getName());
+                return null;
+            },
+            param -> {
+                ((BuildingPopup) param).dismiss();
+                return null;
+            },
+            param -> {
+                BuildingPopup popup = ((BuildingPopup) param);
+                building.setName(popup.getInput().getText().toString());
+                ((TextView) findViewById(R.id.building_name)).setText(building.getName());
+                popup.dismiss();
+                return null;
+            },
+            BuildingPopup.MODE_EDIT
+        ).show();
+    }
+
     protected void showAddRoomPopup(View v) {
-        AlertDialog.Builder builder = new AlertDialog.Builder(BuildingActivity.this);
-        AlertDialog dialog = builder.create();
-        LayoutInflater factory = LayoutInflater.from(BuildingActivity.this);
-        View popup = factory.inflate(R.layout.add_room_popup, null);
-        dialog.setView(popup);
-
-        dialog.setOnShowListener(dialogInterface -> {
-            TextView r_err = popup.findViewById(R.id.room_input_error_msg);
-            EditText r_name = popup.findViewById(R.id.input_room_name);
-            Button validate_btn = popup.findViewById(R.id.btn_validate_room);
-            Button cancel_btn = popup.findViewById(R.id.btn_cancel_room);
-
-            validate_btn.setEnabled(false);
-            r_err.setText("");
-            r_name.addTextChangedListener(new TextWatcher() {
-                public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) {}
-                public void onTextChanged(CharSequence charSequence, int i, int i1, int i2) {}
-                public void afterTextChanged(Editable editable) {
-                    validate_btn.setEnabled(false);
-                    r_err.setText("");
-                    String input = editable.toString();
-                    if (input.length() == 0) {
-                        r_err.setText(getResources().getString(R.string.specify_room_name));
-                        return;
-                    }
-                    if (building.getRoom(input) != null) {
-                        r_err.setText(getResources().getString(R.string.room_exists));
-                        return;
-                    }
-                    // everything is correct, display the button
-                    validate_btn.setEnabled(true);
-                }
-            });
-
-            cancel_btn.setOnClickListener(view -> {
-                dialog.dismiss();
-            });
-
-            validate_btn.setOnClickListener(view -> {
-                building.addRoom(new RoomInfo(r_name.getText().toString()));
-                room_adapter.setData(building.getRooms());
-                dialog.dismiss();
-            });
-        });
-        dialog.show();
+        new RoomPopup(
+                BuildingActivity.this,
+                building,
+                param -> {
+                    ((RoomPopup) param).getInput().setText("");
+                    return null;
+                },
+                param -> {
+                    ((RoomPopup) param).dismiss();
+                    return null;
+                },
+                param -> {
+                    RoomPopup popup = ((RoomPopup) param);
+                    building.addRoom(new RoomInfo(popup.getInput().getText().toString()));
+                    room_adapter.setData(building.getRooms());
+                    popup.dismiss();
+                    return null;
+                },
+                RoomPopup.MODE_NEW
+        ).show();
     }
 }
\ No newline at end of file
diff --git a/Sources/app/src/main/java/com/furwaz/roomview/RoomActivity.java b/Sources/app/src/main/java/com/furwaz/roomview/RoomActivity.java
index 3e63bcb695da720d20543a91b2cac36927b70a25..e408d8b2fffa0990bf87a5f1592c3c1c749569aa 100644
--- a/Sources/app/src/main/java/com/furwaz/roomview/RoomActivity.java
+++ b/Sources/app/src/main/java/com/furwaz/roomview/RoomActivity.java
@@ -28,6 +28,7 @@ import java.util.Locale;
 
 import Common.BuildingManager;
 import Common.InfoBinding;
+import Popups.RoomPopup;
 import Structures.BuildingInfo;
 import Structures.PathDoor;
 import Structures.PathInfo;
@@ -142,6 +143,9 @@ public class RoomActivity extends AppCompatActivity {
             else showAddZonePopup(view);
         });
 
+        ImageButton edit_btn = findViewById(R.id.edit_room_name);
+        edit_btn.setOnClickListener(view -> showEditPopup());
+
         TextView room_tv_name = findViewById(R.id.room_name);
         room_tv_name.setText(room.getName());
     }
@@ -193,6 +197,30 @@ public class RoomActivity extends AppCompatActivity {
         tv.setPadding(padding, padding, padding, padding);
     }
 
+    protected void showEditPopup() {
+        new RoomPopup(
+                this,
+                building,
+                param -> {
+                    ((RoomPopup) param).getInput().setText(room.getName());
+                    return null;
+                },
+                param -> {
+                    ((RoomPopup) param).dismiss();
+                    return null;
+                },
+                param -> {
+                    RoomPopup popup = ((RoomPopup) param);
+                    String newName = popup.getInput().getText().toString();
+                    ((TextView) findViewById(R.id.room_name)).setText(newName);
+                    room.setName(newName);
+                    popup.dismiss();
+                    return null;
+                },
+                RoomPopup.MODE_EDIT
+        ).show();
+    }
+
     protected void showAddZonePopup(View v) {
         AlertDialog.Builder builder = new AlertDialog.Builder(RoomActivity.this);
         AlertDialog dialog = builder.create();
diff --git a/Sources/app/src/main/res/layout/activity_building.xml b/Sources/app/src/main/res/layout/activity_building.xml
index 05d32650c7eb901abece1294c5053cc4563c3dc9..62ba0eebf7b4bab5d83bf79574dcc6e0f2e246b2 100644
--- a/Sources/app/src/main/res/layout/activity_building.xml
+++ b/Sources/app/src/main/res/layout/activity_building.xml
@@ -11,20 +11,33 @@
         android:layout_height="match_parent"
         android:orientation="vertical"
         android:background="@color/slate_50">
-        <TextView
-            android:id="@+id/building_name"
+        <LinearLayout
             android:layout_width="match_parent"
-            android:layout_height="wrap_content"
-            android:gravity="center"
-            android:paddingBottom="20dp"
-            android:paddingTop="20dp"
-            android:textSize="40sp"
-            android:text=""
-            android:maxLines="1"
-            android:ellipsize="end"
-            android:scrollHorizontally="true"
-            android:textStyle="bold"
-            android:textColor="@color/blue_500"/>
+            android:layout_height="wrap_content">
+            <TextView
+                android:id="@+id/building_name"
+                android:layout_width="0dp"
+                android:layout_weight="6"
+                android:layout_height="wrap_content"
+                android:gravity="center"
+                android:paddingBottom="20dp"
+                android:paddingTop="20dp"
+                android:textSize="40sp"
+                android:text=""
+                android:maxLines="1"
+                android:ellipsize="end"
+                android:scrollHorizontally="true"
+                android:textStyle="bold"
+                android:textColor="@color/blue_500"/>
+            <ImageButton
+                android:id="@+id/edit_building_name"
+                android:layout_width="0dp"
+                android:layout_weight="1"
+                android:layout_height="wrap_content"
+                android:background="#00000000"
+                android:src="@drawable/ic_baseline_edit_24"
+                android:layout_gravity="center"/>
+        </LinearLayout>
         <LinearLayout
             android:layout_width="match_parent"
             android:layout_height="match_parent"
diff --git a/Sources/app/src/main/res/layout/activity_room.xml b/Sources/app/src/main/res/layout/activity_room.xml
index e8eb78156c5fc8da258b8cd15680cdc3bb820f29..06753c24c7dcc0a76f75faf32c6083f20391cb53 100644
--- a/Sources/app/src/main/res/layout/activity_room.xml
+++ b/Sources/app/src/main/res/layout/activity_room.xml
@@ -11,20 +11,34 @@
         android:layout_height="match_parent"
         android:orientation="vertical"
         android:background="@color/slate_50">
-        <TextView
-            android:id="@+id/room_name"
+        <LinearLayout
             android:layout_width="match_parent"
             android:layout_height="wrap_content"
-            android:gravity="center"
-            android:paddingBottom="20dp"
-            android:paddingTop="20dp"
-            android:textSize="40sp"
-            android:text=""
-            android:maxLines="1"
-            android:ellipsize="end"
-            android:scrollHorizontally="true"
-            android:textStyle="bold"
-            android:textColor="@color/blue_500"/>
+            android:orientation="horizontal">
+            <TextView
+                android:id="@+id/room_name"
+                android:layout_width="0dp"
+                android:layout_weight="6"
+                android:layout_height="wrap_content"
+                android:gravity="center"
+                android:paddingBottom="20dp"
+                android:paddingTop="20dp"
+                android:textSize="40sp"
+                android:text=""
+                android:maxLines="1"
+                android:ellipsize="end"
+                android:scrollHorizontally="true"
+                android:textStyle="bold"
+                android:textColor="@color/blue_500"/>
+            <ImageButton
+                android:id="@+id/edit_room_name"
+                android:layout_width="0dp"
+                android:layout_weight="1"
+                android:layout_height="wrap_content"
+                android:background="#00000000"
+                android:src="@drawable/ic_baseline_edit_24"
+                android:layout_gravity="center"/>
+        </LinearLayout>
         <LinearLayout
             android:layout_width="match_parent"
             android:layout_height="match_parent"
diff --git a/Sources/app/src/main/res/layout/add_building_popup.xml b/Sources/app/src/main/res/layout/add_building_popup.xml
index 24f6f0b5bb3332114632a45824588d7a47a83f75..946e78fcc8c43edb4bffad58ab68ac8a40c6f142 100644
--- a/Sources/app/src/main/res/layout/add_building_popup.xml
+++ b/Sources/app/src/main/res/layout/add_building_popup.xml
@@ -18,10 +18,11 @@
             android:layout_marginBottom="20dp">
 
             <TextView
+                android:id="@+id/building_popup_title"
                 android:layout_width="match_parent"
                 android:layout_height="wrap_content"
                 android:background="@color/slate_200"
-                android:text="@string/new_building"
+                android:text=""
                 android:textColor="@color/blue_500"
                 android:textSize="20sp"
                 android:layout_marginBottom="4dp"
diff --git a/Sources/app/src/main/res/layout/add_room_popup.xml b/Sources/app/src/main/res/layout/add_room_popup.xml
index 3c6ee5f997eb4fa76e378b277cda84a9bf3fb10f..664d0095f267788772acec5e657583f1838e5a44 100644
--- a/Sources/app/src/main/res/layout/add_room_popup.xml
+++ b/Sources/app/src/main/res/layout/add_room_popup.xml
@@ -18,6 +18,7 @@
             android:layout_marginBottom="20dp">
 
             <TextView
+                android:id="@+id/room_popup_title"
                 android:layout_width="match_parent"
                 android:layout_height="wrap_content"
                 android:background="@color/slate_200"