diff --git a/connection.cpp b/connection.cpp
index 5e10078..6103c00 100644
--- a/connection.cpp
+++ b/connection.cpp
@@ -336,6 +336,7 @@ DBresult::DBresult(DBconn *conn, const wxString &query)
 	if (result)
 	{
 		int rc = PQresultStatus(result);
+		conn->SetLastResult(rc);
 		if (rc == PGRES_TUPLES_OK)
 			maxRows = PQntuples(result);
 		else if (rc != PGRES_COMMAND_OK)
diff --git a/include/connection.h b/include/connection.h
index 04087db..3cd1c0d 100644
--- a/include/connection.h
+++ b/include/connection.h
@@ -51,7 +51,33 @@ public:
 	{
 		return conn != 0;
 	}
-
+        bool LastCommandOk()
+        {
+                return IsCommandOk((ExecStatusType)lastResult);
+        }
+        bool IsCommandOk(ExecStatusType ret)
+        {
+                switch (ret)
+                {
+                        case PGRES_COMMAND_OK:
+                        case PGRES_TUPLES_OK:
+                        case PGRES_COPY_OUT:
+                        case PGRES_COPY_IN:
+                        case PGRES_COPY_BOTH:
+                                return true;
+                        default:
+                                return false;
+                };
+        }
+        void SetLastResult(int res)
+        {
+                lastResult = res;
+        }
+        int GetLastResult()
+        {
+                return lastResult;
+        }
+	
 	DBresult *Execute(const wxString &query);
 	wxString ExecuteScalar(const wxString &query);
 	int ExecuteVoid(const wxString &query);
@@ -70,7 +96,7 @@ protected:
 	PGconn *conn;
 	DBconn *next, *prev;
 	bool inUse;
-
+	int lastResult;
 	friend class DBresult;
 
 };
diff --git a/job.cpp b/job.cpp
index 9a5bb08..ba270be 100644
--- a/job.cpp
+++ b/job.cpp
@@ -80,6 +80,7 @@ Job::~Job()
 int Job::Execute()
 {
 	int rc = 0;
+	bool succeeded = false;
 	DBresult *steps = threadConn->Execute(
 	                      wxT("SELECT * ")
 	                      wxT("  FROM pgagent.pga_jobstep ")
@@ -138,13 +139,14 @@ int Job::Execute()
 				{
 					LogMessage(wxString::Format(_("Executing SQL step %s (part of job %s)"), stepid.c_str(), jobid.c_str()), LOG_DEBUG);
 					rc = stepConn->ExecuteVoid(steps->GetString(wxT("jstcode")));
+					succeeded = stepConn->LastCommandOk();
 					output = stepConn->GetLastError();
 					stepConn->Return();
 				}
 				else
 				{
 					output = _("Couldn't get a connection to the database!");
-					rc = -1;
+					succeeded = false;
 				}
 
 
@@ -292,6 +294,9 @@ int Job::Execute()
 					rc = WEXITSTATUS(rc);
 				else
 					rc = -1;
+				// set success status for batch runs, be pessimistic bt default
+				if (rc == 0)
+					succeeded = true;
 #endif
 
 				// Delete the file/directory. If we fail, don't overwrite the script output in the log, just throw warnings.
@@ -319,7 +324,7 @@ int Job::Execute()
 		}
 
 		wxString stepstatus;
-		if (rc == 0)
+		if (succeeded)
 			stepstatus = wxT("s");
 		else
 			stepstatus = steps->GetString(wxT("jstonerror"));
