diff --git a/phpBB/develop/namespacify.php b/phpBB/develop/namespacify.php
new file mode 100644
index 0000000000..1995a01594
--- /dev/null
+++ b/phpBB/develop/namespacify.php
@@ -0,0 +1,174 @@
+<?php
+
+$namespace_dir = realpath(__DIR__ . '/../phpbb/');
+$code_dir = realpath(__DIR__ . '/../');
+$test_dir = realpath(__DIR__ . '/../../tests/');
+$config_dir = realpath(__DIR__ . '/../config/');
+
+function map_class_name($old_class_name, $code_dir)
+{
+	$parts = explode('_', $old_class_name);
+	$cur_dir = array();
+	$cur_name = array();
+	$in_name = false;
+	foreach ($parts as $i => $part)
+	{
+		if (empty($part))
+		{
+			return null;
+		}
+
+		if (!$in_name)
+		{
+			$new_dir = array_merge($cur_dir, array($part));
+			$path = $code_dir . '/' . implode('/', $new_dir);
+
+			if (file_exists($path) && is_dir($path))
+			{
+				$cur_dir = $new_dir;
+			}
+			else
+			{
+				$in_name = true;
+				$cur_name[] = $part;
+			}
+		}
+		else
+		{
+			$cur_name[] = $part;
+		}
+	}
+
+	if (empty($cur_name) && !empty($cur_dir))
+	{
+		$cur_name[] = $cur_dir[count($cur_dir) - 1];
+	}
+
+	if (file_exists($code_dir . '/' . implode('/', $cur_dir) . '/' . implode('_', $cur_name) . '.php'))
+	{
+		return implode('\\', $cur_dir) . '\\' . implode('_', $cur_name);
+	}
+
+	return null;
+}
+
+$iterator = new \AppendIterator();
+$iterator->append(new \RecursiveIteratorIterator(new \RecursiveDirectoryIterator($code_dir)));
+$iterator->append(new \RecursiveIteratorIterator(new \RecursiveDirectoryIterator($test_dir)));
+$iterator->append(new \RecursiveIteratorIterator(new \RecursiveDirectoryIterator($config_dir)));
+
+foreach ($iterator as $file)
+{
+	if (substr($file->getPath(), 0, 6) === 'vendor')
+	{
+		continue;
+	}
+
+	if ($file->getExtension() == 'php')
+	{
+		$code = file_get_contents($file->getPathname());
+		$namespaced_file = false;
+
+		if (preg_match('#^' . preg_quote($namespace_dir, '#') . '#', $file->getPath()))
+		{
+			if (preg_match('#^(?:interface|(?:abstract )?class) (phpbb_[a-z0-9_]+)#m', $code, $matches))
+			{
+				$old_class_name = $matches[1];
+				$dirs = explode(DIRECTORY_SEPARATOR, preg_replace('#^' . preg_quote(dirname($namespace_dir) . DIRECTORY_SEPARATOR, '#') . '#', '', $file->getPath()));
+
+				$namespace = implode('\\', $dirs);
+
+				if ($dirs[count($dirs) - 1] == substr($file->getFilename(), 0, -4))
+				{
+					$class_name = preg_replace('#^' . preg_quote(implode('_', $dirs), '#') . '#', $dirs[count($dirs) - 1], $old_class_name);
+				}
+				else
+				{
+					$class_name = preg_replace('#^' . preg_quote(implode('_', $dirs), '#') . '_#', '', $old_class_name);
+				}
+
+				$code = preg_replace("#^\*/$#m", "*/\n\nnamespace $namespace;", $code, 1, $count);
+				if ($count != 1)
+				{
+					die("Incorrect replacement count for namespace of $old_class_name");
+				}
+				$code = preg_replace("#^(interface|(?:abstract )?class) $old_class_name#m", "\\1 $class_name", $code, -1, $count);
+				if ($count != 1)
+				{
+					die("Incorrect replacement count for $old_class_name");
+				}
+
+				$namespaced_file = true;
+			}
+		}
+
+		if (preg_match_all('#[^a-z0-9_$](phpbb_[a-z0-9_]+)#', $code, $matches))
+		{
+			foreach ($matches[1] as $old_class_name)
+			{
+				$class_name = map_class_name($old_class_name, $code_dir);
+				if ($class_name)
+				{
+					$code = preg_replace("#([^a-z0-9_\$>])$old_class_name([^a-z0-9_])#", '\\1\\\\' . $class_name . '\\2', $code);
+				}
+			}
+		}
+
+		if ($namespaced_file)
+		{
+			$code = preg_replace('#new ([a-zA-Z0-9_][a-zA-Z0-9_\\\\]+)#', 'new \\\\\\1', $code);
+			$code = preg_replace('#([^a-zA-Z0-9_\\\\$])([a-zA-Z0-9_][a-zA-Z0-9_\\\\]+)::#', '\\1\\\\\\2::', $code);
+			$code = preg_replace('#catch \(([a-zA-Z0-9_][a-zA-Z0-9_\\\\]+)#', 'catch (\\\\\\1', $code);
+			$code = preg_replace('#(\(|, )([a-zA-Z0-9_][a-zA-Z0-9_\\\\]+)(\s\$)#', '\\1\\\\\\2\\3', $code);
+			$code = preg_replace('#(implements |extends )([a-zA-Z0-9_][a-zA-Z0-9_\\\\]+)(?=\s*(?:,|\n))#', '\\1\\\\\\2', $code);
+			$abs_classes = array(
+				'Countable',
+				'IteratorAggregate',
+				'ArrayAccess',
+			);
+			$code = preg_replace('#(\s+)(' . implode('|', $abs_classes) . ')#', '\\1\\\\\\2', $code);
+			$rel_classes = array(
+				'ContainerBuilder',
+				'YamlFileLoader',
+				'FileLocator',
+				'Extension',
+				'CompilerPassInterface',
+				'EventSubscriberInterface',
+				'EventDispatcherInterface',
+				'ContainerAwareEventDispatcher',
+				'ContainerInterface',
+				'KernelEvents',
+				'RouteCollection',
+				'ControllerResolverInterface',
+				'Request',
+				'include',
+				'array',
+				'parent',
+				'self',
+			);
+			$code = preg_replace('#([^a-zA-Z0-9_])\\\\((?:' . implode('|', $rel_classes) . ')(?:\s|\(|::|;))#', '\\1\\2', $code);
+		}
+
+		file_put_contents($file->getPathname(), $code);
+	}
+
+	if ($file->getExtension() == 'yml')
+	{
+		$code = file_get_contents($file->getPathname());
+
+		if (preg_match_all('#\s*class:\s*(phpbb_[a-z0-9_]+)\s+#', $code, $matches))
+		{
+			foreach ($matches[1] as $old_class_name)
+			{
+				$class_name = map_class_name($old_class_name, $code_dir);
+				if ($class_name)
+				{
+					$code = preg_replace("#(\s*class:\s*)$old_class_name(\s+)#", "\\1$class_name\\2", $code);
+				}
+			}
+		}
+
+		file_put_contents($file->getPathname(), $code);
+	}
+}
+
diff --git a/phpBB/develop/rename_interfaces.php b/phpBB/develop/rename_interfaces.php
new file mode 100644
index 0000000000..b27f93e340
--- /dev/null
+++ b/phpBB/develop/rename_interfaces.php
@@ -0,0 +1,36 @@
+<?php
+
+$code_dir = realpath(__DIR__ . '/../');
+$test_dir = realpath(__DIR__ . '/../../tests/');
+$iterator = new \AppendIterator();
+$iterator->append(new \RecursiveIteratorIterator(new \RecursiveDirectoryIterator($code_dir)));
+$iterator->append(new \RecursiveIteratorIterator(new \RecursiveDirectoryIterator($test_dir)));
+
+$map = array(
+	'phpbb\request\request_interface' => 'phpbb\request\request_interface',
+	'phpbb\auth\provider\provider_interface' => 'phpbb\auth\provider\provider_interface',
+	'phpbb\avatar\driver\driver_interface' => 'phpbb\avatar\driver\driver_interface',
+	'phpbb\cache\driver\driver_interface' => 'phpbb\cache\driver\driver_interface',
+	'phpbb\db\migration\tool\tool_interface' => 'phpbb\db\migration\tool\tool_interface',
+	'phpbb\extension\extension_interface' => 'phpbb\extension\extension_interface',
+	'phpbb\groupposition\groupposition_interface' => 'phpbb\groupposition\groupposition_interface',
+	'phpbb\log\log_interface' => 'phpbb\log\log_interface',
+	'phpbb\notification\method\method_interface' => 'phpbb\notification\method\method_interface',
+	'phpbb\notification\type\type_interface' => 'phpbb\notification\type\type_interface',
+	'phpbb\request\request_interface' => 'phpbb\request\request_interface',
+	'phpbb\tree\tree_interface' => 'phpbb\tree\tree_interface',
+);
+
+foreach ($iterator as $file)
+{
+	if ($file->getExtension() == 'php')
+	{
+		$code = file_get_contents($file->getPathname());
+
+		foreach ($map as $orig => $new)
+		{
+			$code = preg_replace("#([^a-z0-9_\$])$orig([^a-z0-9_])#i", '\\1' . $new . '\\2', $code);
+		}
+		file_put_contents($file->getPathname(), $code);
+	}
+}