diff --git a/core/command/config/system/deleteconfig.php b/core/command/config/system/deleteconfig.php
new file mode 100644
index 0000000000000000000000000000000000000000..c4930a8d3aa4eeb56060f8dd087679ef7908a030
--- /dev/null
+++ b/core/command/config/system/deleteconfig.php
@@ -0,0 +1,75 @@
+<?php
+/**
+ * @author Joas Schilling <nickvergessen@owncloud.com>
+ *
+ * @copyright Copyright (c) 2015, ownCloud, Inc.
+ * @license AGPL-3.0
+ *
+ * This code is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License, version 3,
+ * as published by the Free Software Foundation.
+ *
+ * This program 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 Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License, version 3,
+ * along with this program.  If not, see <http://www.gnu.org/licenses/>
+ *
+ */
+
+namespace OC\Core\Command\Config\System;
+
+use OC\Core\Command\Base;
+use OC\SystemConfig;
+use Symfony\Component\Console\Input\InputArgument;
+use Symfony\Component\Console\Input\InputInterface;
+use Symfony\Component\Console\Input\InputOption;
+use Symfony\Component\Console\Output\OutputInterface;
+
+class DeleteConfig extends Base {
+	/** * @var SystemConfig */
+	protected $systemConfig;
+
+	/**
+	 * @param SystemConfig $systemConfig
+	 */
+	public function __construct(SystemConfig $systemConfig) {
+		parent::__construct();
+		$this->systemConfig = $systemConfig;
+	}
+
+	protected function configure() {
+		parent::configure();
+
+		$this
+			->setName('config:system:delete')
+			->setDescription('Delete a system config value')
+			->addArgument(
+				'name',
+				InputArgument::REQUIRED,
+				'Name of the config to set'
+			)
+			->addOption(
+				'error-if-not-exists',
+				null,
+				InputOption::VALUE_NONE,
+				'Checks whether the config exists before deleting it'
+			)
+		;
+	}
+
+	protected function execute(InputInterface $input, OutputInterface $output) {
+		$configName = $input->getArgument('name');
+
+		if ($input->hasParameterOption('--error-if-not-exists') && !in_array($configName, $this->systemConfig->getKeys())) {
+			$output->writeln('<error>Config ' . $configName . ' could not be deleted because it did not exist</error>');
+			return 1;
+		}
+
+		$this->systemConfig->deleteValue($configName);
+		$output->writeln('<info>System config value ' . $configName . ' deleted</info>');
+		return 0;
+	}
+}
diff --git a/core/command/config/system/getconfig.php b/core/command/config/system/getconfig.php
index a462b1543393e3b6a32286540675128b0d4a70af..1ed3b36da36b23e9d33f251bf0eb770e67a21cd4 100644
--- a/core/command/config/system/getconfig.php
+++ b/core/command/config/system/getconfig.php
@@ -23,7 +23,6 @@ namespace OC\Core\Command\Config\System;
 
 use OC\Core\Command\Base;
 use OC\SystemConfig;
-use OCP\IAppConfig;
 use Symfony\Component\Console\Input\InputArgument;
 use Symfony\Component\Console\Input\InputInterface;
 use Symfony\Component\Console\Input\InputOption;
diff --git a/core/command/config/system/setconfig.php b/core/command/config/system/setconfig.php
index e2c901cc789d6676502eb557c32ed7f124645631..6eda9db8f932fceeec7a5cf2b263e6d8cccc6211 100644
--- a/core/command/config/system/setconfig.php
+++ b/core/command/config/system/setconfig.php
@@ -23,7 +23,6 @@ namespace OC\Core\Command\Config\System;
 
 use OC\Core\Command\Base;
 use OC\SystemConfig;
-use OCP\IAppConfig;
 use Symfony\Component\Console\Input\InputArgument;
 use Symfony\Component\Console\Input\InputInterface;
 use Symfony\Component\Console\Input\InputOption;
diff --git a/core/register_command.php b/core/register_command.php
index 75bd5d8e53ed782aedcacc59561ee75dc1e71cb5..9ef8ca5e58b3cd4ddc4b00c244eb39910a270d0d 100644
--- a/core/register_command.php
+++ b/core/register_command.php
@@ -41,6 +41,7 @@ if (\OC::$server->getConfig()->getSystemValue('installed', false)) {
 	$application->add(new OC\Core\Command\Background\Ajax(\OC::$server->getConfig()));
 
 	$application->add(new OC\Core\Command\Config\ListConfigs(\OC::$server->getSystemConfig(), \OC::$server->getAppConfig()));
+	$application->add(new OC\Core\Command\Config\System\DeleteConfig(\OC::$server->getSystemConfig()));
 	$application->add(new OC\Core\Command\Config\System\GetConfig(\OC::$server->getSystemConfig()));
 	$application->add(new OC\Core\Command\Config\System\SetConfig(\OC::$server->getSystemConfig()));
 
diff --git a/tests/core/command/config/system/deleteconfigtest.php b/tests/core/command/config/system/deleteconfigtest.php
new file mode 100644
index 0000000000000000000000000000000000000000..b10fa16ed617334e2e8a90f8d95d80215cf21160
--- /dev/null
+++ b/tests/core/command/config/system/deleteconfigtest.php
@@ -0,0 +1,120 @@
+<?php
+/**
+ * @author Joas Schilling <nickvergessen@owncloud.com>
+ *
+ * @copyright Copyright (c) 2015, ownCloud, Inc.
+ * @license AGPL-3.0
+ *
+ * This code is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License, version 3,
+ * as published by the Free Software Foundation.
+ *
+ * This program 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 Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License, version 3,
+ * along with this program.  If not, see <http://www.gnu.org/licenses/>
+ *
+ */
+
+namespace Tests\Core\Command\Config\System;
+
+
+use OC\Core\Command\Config\System\DeleteConfig;
+use Test\TestCase;
+
+class DeleteConfigTest extends TestCase {
+	/** @var \PHPUnit_Framework_MockObject_MockObject */
+	protected $systemConfig;
+
+	/** @var \PHPUnit_Framework_MockObject_MockObject */
+	protected $consoleInput;
+	/** @var \PHPUnit_Framework_MockObject_MockObject */
+	protected $consoleOutput;
+
+	/** @var \Symfony\Component\Console\Command\Command */
+	protected $command;
+
+	protected function setUp() {
+		parent::setUp();
+
+		$systemConfig = $this->systemConfig = $this->getMockBuilder('OC\SystemConfig')
+			->disableOriginalConstructor()
+			->getMock();
+		$this->consoleInput = $this->getMock('Symfony\Component\Console\Input\InputInterface');
+		$this->consoleOutput = $this->getMock('Symfony\Component\Console\Output\OutputInterface');
+
+		/** @var \OC\SystemConfig $systemConfig */
+		$this->command = new DeleteConfig($systemConfig);
+	}
+
+
+	public function deleteData() {
+		return [
+			[
+				'name',
+				true,
+				true,
+				0,
+				'info',
+			],
+			[
+				'name',
+				true,
+				false,
+				0,
+				'info',
+			],
+			[
+				'name',
+				false,
+				false,
+				0,
+				'info',
+			],
+			[
+				'name',
+				false,
+				true,
+				1,
+				'error',
+			],
+		];
+	}
+
+	/**
+	 * @dataProvider deleteData
+	 *
+	 * @param string $configName
+	 * @param bool $configExists
+	 * @param bool $checkIfExists
+	 * @param int $expectedReturn
+	 * @param string $expectedMessage
+	 */
+	public function testDelete($configName, $configExists, $checkIfExists, $expectedReturn, $expectedMessage) {
+		$this->systemConfig->expects(($checkIfExists) ? $this->once() : $this->never())
+			->method('getKeys')
+			->willReturn($configExists ? [$configName] : []);
+
+		$this->systemConfig->expects(($expectedReturn === 0) ? $this->once() : $this->never())
+			->method('deleteValue')
+			->with($configName);
+
+		$this->consoleInput->expects($this->once())
+			->method('getArgument')
+			->with('name')
+			->willReturn($configName);
+		$this->consoleInput->expects($this->any())
+			->method('hasParameterOption')
+			->with('--error-if-not-exists')
+			->willReturn($checkIfExists);
+
+		$this->consoleOutput->expects($this->any())
+			->method('writeln')
+			->with($this->stringContains($expectedMessage));
+
+		$this->assertSame($expectedReturn, \Test_Helper::invokePrivate($this->command, 'execute', [$this->consoleInput, $this->consoleOutput]));
+	}
+}
diff --git a/tests/core/command/config/system/getconfigtest.php b/tests/core/command/config/system/getconfigtest.php
index 3aa21611a800911ea0129050413695dd98e67550..1c74bcd67ce0dc4e7891bc12da06592bc77e92f9 100644
--- a/tests/core/command/config/system/getconfigtest.php
+++ b/tests/core/command/config/system/getconfigtest.php
@@ -51,7 +51,7 @@ class GetConfigTest extends TestCase {
 	}
 
 
-	public function setData() {
+	public function getData() {
 		return [
 			// String output as json
 			['name', 'newvalue', true, null, false, 'json', 0, json_encode('newvalue')],
@@ -94,7 +94,7 @@ class GetConfigTest extends TestCase {
 	}
 
 	/**
-	 * @dataProvider setData
+	 * @dataProvider getData
 	 *
 	 * @param string $configName
 	 * @param mixed $value
@@ -105,7 +105,7 @@ class GetConfigTest extends TestCase {
 	 * @param int $expectedReturn
 	 * @param string $expectedMessage
 	 */
-	public function testList($configName, $value, $configExists, $defaultValue, $hasDefault, $outputFormat, $expectedReturn, $expectedMessage) {
+	public function testGet($configName, $value, $configExists, $defaultValue, $hasDefault, $outputFormat, $expectedReturn, $expectedMessage) {
 		$this->systemConfig->expects($this->atLeastOnce())
 			->method('getKeys')
 			->willReturn($configExists ? [$configName] : []);
diff --git a/tests/core/command/config/system/setconfigtest.php b/tests/core/command/config/system/setconfigtest.php
index 53f956515598658a73d943c5a91534abddc1eaa3..53bb9e59e11b23284d963a5e722f0a2103de5071 100644
--- a/tests/core/command/config/system/setconfigtest.php
+++ b/tests/core/command/config/system/setconfigtest.php
@@ -82,7 +82,7 @@ class SetConfigTest extends TestCase {
 	 * @param bool $updated
 	 * @param string $expectedMessage
 	 */
-	public function testList($configName, $newValue, $configExists, $updateOnly, $updated, $expectedMessage) {
+	public function testSet($configName, $newValue, $configExists, $updateOnly, $updated, $expectedMessage) {
 		$this->systemConfig->expects($this->once())
 			->method('getKeys')
 			->willReturn($configExists ? [$configName] : []);