diff --git a/source/tools/atlas/AtlasUI/ScenarioEditor/Tools/FillTerrain.cpp b/source/tools/atlas/AtlasUI/ScenarioEditor/Tools/FillTerrain.cpp
new file mode 100644
index 0000000000..005d025a63
--- /dev/null
+++ b/source/tools/atlas/AtlasUI/ScenarioEditor/Tools/FillTerrain.cpp
@@ -0,0 +1,77 @@
+/* Copyright (C) 2011 Wildfire Games.
+ * This file is part of 0 A.D.
+ *
+ * 0 A.D. is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * 0 A.D. is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with 0 A.D. If not, see .
+ */
+
+#include "precompiled.h"
+
+#include "ScenarioEditor/ScenarioEditor.h"
+#include "Common/Tools.h"
+#include "Common/Brushes.h"
+#include "Common/MiscState.h"
+#include "GameInterface/Messages.h"
+
+using AtlasMessage::Position;
+
+class FillTerrain : public StateDrivenTool
+{
+ DECLARE_DYNAMIC_CLASS(FillTerrain);
+
+ Position m_Pos;
+ Brush m_Brush;
+
+public:
+ FillTerrain()
+ {
+ m_Brush.SetSquare(2);
+ SetState(&Waiting);
+ }
+
+ void OnEnable()
+ {
+ m_Brush.MakeActive();
+ }
+
+ void OnDisable()
+ {
+ POST_MESSAGE(BrushPreview, (false, Position()));
+ }
+
+ struct sWaiting : public State
+ {
+ bool OnMouse(FillTerrain* WXUNUSED(obj), wxMouseEvent& evt)
+ {
+ if (evt.LeftDown())
+ {
+ Position pos(evt.GetPosition());
+ POST_MESSAGE(BrushPreview, (true, pos));
+ POST_COMMAND(FillTerrain, (pos, g_SelectedTexture.c_str()));
+ return true;
+ }
+ else if (evt.Moving())
+ {
+ POST_MESSAGE(BrushPreview, (true, Position(evt.GetPosition())));
+ return true;
+ }
+ else
+ {
+ return false;
+ }
+ }
+ }
+ Waiting;
+};
+
+IMPLEMENT_DYNAMIC_CLASS(FillTerrain, StateDrivenTool);