#include <stdio.h>
 #include <string.h>
+#include <ctype.h>
 
 #include <libpq-fe.h>
 
 
 int Param_getIntArray(const Param *my, const char *name, const char *idx, int maxrows, int *rows, unsigned long int *val)
 {
-       int retVal;
        int fnum;
        int i;
        PGresult *result;
        char whereClause[PG_MAX_CLAUSE_LEN];
        char query[PG_MAX_QUERY_LEN];
        char *endptr;
+       char lname[strlen(name) + 1];
+       char lidx[strlen(idx) + 1];
+
+       for(i = 0 ; i <=strlen(name) ; i++) {
+               lname[i] = tolower(name[i]);
+       }
+       for(i = 0 ; i <=strlen(idx) ; i++) {
+               lidx[i] = tolower(idx[i]);
+       }
+
        *rows = 0;
        conn = PQconnectdb("host=casino dbname=bsailer user=bsailer");
-       sprintf(whereClause, "WHERE name = \'%s\' AND idx = \'%s\' ORDER BY seq_num", name, idx);
-       sprintf(query, "SELECT * FROM card_params %s UNION SELECT * FROM cpus %s UNION SELECT * FROM crate_params %s UNION SELECT * FROM crate_setup %s;", whereClause, whereClause, whereClause, whereClause);
+       sprintf(whereClause, "WHERE name = '%s' AND idx = '%s' ", lname, lidx);
+       sprintf(query, "SELECT * FROM card_params %s UNION SELECT * FROM cpus %s UNION SELECT * FROM crate_params %s UNION SELECT * FROM crate_setup %s ORDER BY seq_num;", whereClause, whereClause, whereClause, whereClause);
 
        result = PQexec(conn, query);
        if(PQresultStatus(result) != PGRES_TUPLES_OK) {
                return -1;
        }
        fnum = PQfnumber(result, "value");
-                     
+
        if ((*rows = PQntuples(result)) > maxrows) {
-               Param_strerror((Param *) my, "Result has to many rows. Returning only 'maxrows' rows.\n");
-               for (i = 0 ; i < maxrows ; i++) {
-                       val[i] = strtoul(PQgetvalue(result, i, fnum), &endptr, 0);
-                       if(*endptr != '\0') {
-                               Param_strerror((Param *) my, "Value seems to be no integer.\n");
-                               retVal = -1;
-                       }
-               }
-               retVal = -1;
-       } else {
-               for (i = 0 ; i < *rows ; i++) {
-                       val[i] = strtoul(PQgetvalue(result, i, fnum), &endptr, 0);
-                       if(*endptr != '\0') {
-                               Param_strerror((Param *) my, "Value seems to be no integer.\n");
-                               retVal = -1;
-                       }
-               }
-               for (i = *rows ; i < maxrows ; i++) {
-                       val[i] = 0;
+               *rows = maxrows;
+       }
+       for (i = 0 ; i < *rows ; i++) {
+               val[i] = strtoul(PQgetvalue(result, i, fnum), &endptr, 0);
+               if(*endptr != '\0') {
+                       Param_strerror((Param *) my, "Value seems to be no integer.\n");
+                       *rows = 0;
+                       return -1;
                }
-               retVal = 0;
+       }
+       for (i = *rows ; i < maxrows ; i++) {
+               val[i] = 0;
        }
        PQfinish(conn);
 
-       return retVal;
+       return 0;
 }
 
 int Param_getStringArray(const Param *my, const char *name, const char *idx, int maxrows, int *rows, char **val)
 {
-       int retVal;
        int fnum;
        int i;
        PGconn *conn;
        PGresult *result;
        char whereClause[PG_MAX_CLAUSE_LEN];
        char query[PG_MAX_QUERY_LEN];
+       char lname[strlen(name) + 1];
+       char lidx[strlen(idx) + 1];
+
+       for(i = 0 ; i <=strlen(name) ; i++) {
+               lname[i] = tolower(name[i]);
+       }
+       for(i = 0 ; i <=strlen(idx) ; i++) {
+               lidx[i] = tolower(idx[i]);
+       }
+
        *rows = 0;
        conn = PQconnectdb("host=casino dbname=bsailer user=bsailer");
-       sprintf(whereClause, "WHERE name = \'%s\' AND idx = \'%s\' ORDER BY seq_num", name, idx);
-       sprintf(query, "SELECT * FROM card_params %s UNION SELECT * FROM cpus %s UNION SELECT * FROM crate_params %s UNION SELECT * FROM crate_setup %s;", whereClause, whereClause, whereClause, whereClause);
+       sprintf(whereClause, "WHERE name = '%s' AND idx = '%s' ", lname, lidx);
+       sprintf(query, "SELECT * FROM card_params %s UNION SELECT * FROM cpus %s UNION SELECT * FROM crate_params %s UNION SELECT * FROM crate_setup %s ORDER BY seq_num;", whereClause, whereClause, whereClause, whereClause);
 
        result = PQexec(conn, query);
        if(PQresultStatus(result) != PGRES_TUPLES_OK) {
        fnum = PQfnumber(result, "value");
 
        if ((*rows = PQntuples(result)) > maxrows) {
-               Param_strerror((Param *) my, "Result has to many rows. Returning only 'maxrows' rows.\n");
-               for (i = 0 ; i < maxrows ; i++) {
-                       strcpy(val[i], PQgetvalue(result, i, fnum));
-               }
-               retVal = -1;
-       } else {
-               for (i = 0 ; i < *rows ; i++) {
-                       strcpy(val[i], PQgetvalue(result, i, fnum));
-               }
-               for (i = *rows ; i < maxrows ; i++) {
-                       val[i] = NULL;
-               }
-               retVal = 0;
+               *rows = maxrows;
+       }
+       for (i = 0 ; i < *rows ; i++) {
+               strcpy(val[i], PQgetvalue(result, i, fnum));
+       }
+       for (i = *rows ; i < maxrows ; i++) {
+               val[i] = NULL;
        }
        PQfinish(conn);
 
-       return retVal;
+       return 0;
 }
 
 const char *Param_getErrStr(const Param *my)
 
 static void Param_strerror(Param *my, const char *strerror)
 {
-       my->strerror = realloc(my->strerror, strlen(strerror) + 1);
+       my->strerror = realloc(my->strerror, (strlen(strerror) + 1) * sizeof(char));
        if(my->strerror != NULL) {
                strcpy(my->strerror, strerror);
        }