diff --git a/lib/RedMiner/API.pm b/lib/RedMiner/API.pm
index 13fac40211353715aea84fc11554a72fe1d87382..c23e6574560aed8584ad7c2a7ff86474368471b6 100644
--- a/lib/RedMiner/API.pm
+++ b/lib/RedMiner/API.pm
@@ -144,6 +144,10 @@ sub _response
 		return $self->_set_error($response->status_line);
 	}
 
+	if ($request->method eq 'PUT' || $request->method eq 'DELETE') {
+		return {};
+	}
+
 	return eval {
 		JSON::XS::decode_json($response->decoded_content)
 	} // $self->_set_error($@);
diff --git a/t/01-dispatching.t b/t/01-dispatching.t
index 0b6907b7e82c5ff28ac99cc1ffabfc86609ab9ea..dd7fe6e52526547dfc7dc792dc03c830d5ef0d98 100644
--- a/t/01-dispatching.t
+++ b/t/01-dispatching.t
@@ -1,17 +1,16 @@
 use strict;
 use warnings;
 
-use Test::More tests => 30;
+use Test::More tests => 29;
 
-BEGIN { use_ok('RedMiner::API') };
+eval 'use RedMiner::API';
 
 #
-# Tests for internal name dispatching
+# Testing internal name dispatching with a dummy object
 #
-
 my $redminer = RedMiner::API->new(
-	host => '',
-	key  => ''
+	host => '', 
+	key  => '',
 );
 
 my $r;
diff --git a/t/02-realworld.t b/t/02-realworld.t
new file mode 100644
index 0000000000000000000000000000000000000000..998a05704f0be9ef62a8f2441b3df3e11754e2b8
--- /dev/null
+++ b/t/02-realworld.t
@@ -0,0 +1,60 @@
+use strict;
+use warnings;
+
+use Test::More;
+use JSON::XS qw/encode_json/;
+
+if ($ENV{REDMINER_API_DEVEL}) {
+    plan tests => 5;
+} else{
+	plan skip_all => 'Tests require RedMine installation';
+}
+
+eval 'use RedMiner::API';
+
+#
+# Read API key from a simple config file in the format 'host;key'
+#
+my $host = '';
+my $key  = '';
+my $key_fname = $ENV{HOME} . '/.redminer/key';
+
+if (!-e $key_fname) {
+	BAIL_OUT('REDMINER_API_DEVEL set, but key file is not accessible');
+}
+
+open my $FH_key, '<', $key_fname;
+my $key_data  = <$FH_key>;
+($host, $key) = split /\s*;\s*/, $key_data;
+chomp $key_data;
+close $FH_key;
+
+my $redminer = RedMiner::API->new(
+	host => $host,
+	key  => $key,
+);
+
+my $project = $redminer->createProject({
+	identifier => 'redminer-api-test',
+	name       => 'RedMiner API test',
+});
+my $project_id = $project->{project}{id};
+ok(defined $project_id, 'New project created with internal ID ' . $project_id);
+
+ok(!defined $redminer->createProject({
+	identifier => 'redminer-api-test',
+	name       => 'RedMiner API test',
+}), 'Project already exists, error object is ' . JSON::XS::encode_json($redminer->errorDetails));
+
+ok($redminer->updateProject($project_id, { inherit_members => 1 }), 'Project updated');
+
+my $issue = $redminer->createIssue({
+	project_id  => $project_id,
+	subject     => 'Test issue for RedMiner::API',
+	description => 'Test description',
+});
+ok(defined $issue->{issue}{id}, 'Issue created with ID #' . $issue->{issue}{id});
+
+ok($redminer->deleteProject($project_id), 'Project deleted');
+
+exit;
diff --git a/t/RedMiner-API.t b/t/RedMiner-API.t
deleted file mode 100644
index dc7a7e278c86fa6e5d2d63eaa7b4b6c627cd5e7c..0000000000000000000000000000000000000000
--- a/t/RedMiner-API.t
+++ /dev/null
@@ -1,40 +0,0 @@
-use strict;
-use warnings;
-
-use Test::More tests => 1;
-
-BEGIN { use_ok('RedMiner::API') };
-
-my $host = '';
-my $key  = '';
-my $key_fname = $ENV{HOME} . '/.redminer/key';
-if (-e $key_fname) {
-	open my $FH_key, '<', $key_fname;
-	my $key_data  = <$FH_key>;
-	($host, $key) = split /\s*;\s*/, $key_data;
-	chomp $key_data;
-	close $FH_key;
-}
-
-my $redminer = RedMiner::API->new(
-	host => $host,
-	key  => $key,
-);
-
-my $response = $redminer->createProject({
-	identifier => 'test-ru',
-	name       => 'test.ru',
-});
-
-use JSON::XS qw/encode_json/;
-if ($response) {
-	say STDERR JSON::XS::encode_json($response);
-} else {
-	say STDERR JSON::XS::encode_json($redminer->errorDetails);
-}
-
-#SKIP: {
-#	skip 'Development tests skipped', 2 if !$ENV{REDMINER_API_DEVEL};
-#}
-
-exit;