diff --git a/TEST/show.c b/TEST/show.c
index a04b96c..df10c8e 100755
--- a/TEST/show.c
+++ b/TEST/show.c
@@ -90,7 +90,7 @@
             CIMCData data = objectpath->ft->getKeyAt(objectpath, i,
                                                      &keyname, NULL);
             printf("\t%s=%s\n", (char *)keyname->hdl,
-                   cv=value2Chars(data.type, &data.value));
+                   cv=value2Chars(data.type, (CMPIValue *)&data.value));
 	 if(cv) free(cv);
 	 if(keyname) CMRelease(keyname);
       }
diff --git a/TEST/test_di.c b/TEST/test_di.c
index 7566dbb..7097a83 100755
--- a/TEST/test_di.c
+++ b/TEST/test_di.c
@@ -54,7 +54,7 @@
 
     /* Print the results */
     printf( "deleteInstance() rc=%d, msg=%s\n", 
-            status.rc, (status.msg)? (char *)status.msg->hdl : NULL);
+            status.rc, (status.msg)? (char *)status.msg->hdl : "");
 
     if (objectpath) CMRelease(objectpath);
     if (status.msg) CMRelease(status.msg);
diff --git a/TEST/test_ec.c b/TEST/test_ec.c
index 0e9ca27..2247b5f 100755
--- a/TEST/test_ec.c
+++ b/TEST/test_ec.c
@@ -24,8 +24,6 @@
 
 #include "show.h"
 
-static char * _HOSTNAME = "bestorga.ibm.com";
-
 int main()
 {
     CMCIClient *cc;
@@ -62,7 +60,7 @@
          printf("result(s):\n");
          while (enumeration->ft->hasNext(enumeration, NULL)) {
             CMPIData data = enumeration->ft->getNext(enumeration, NULL);
-            showClass(data.value.cls);
+            showClass((CMPIConstClass *)data.value.cls);
         }
     }
 
diff --git a/TEST/test_si.c b/TEST/test_si.c
index e217cc6..dfcec38 100755
--- a/TEST/test_si.c
+++ b/TEST/test_si.c
@@ -61,7 +61,7 @@
 
     /* Print the results */
     printf( "setInstance() rc=%d, msg=%s\n", 
-            status.rc, (status.msg)? (char *)status.msg->hdl : NULL);
+            status.rc, (status.msg)? (char *)status.msg->hdl : "");
 
     if (instance) CMRelease(instance);
     if (objectpath) CMRelease(objectpath);
diff --git a/TEST/test_sp.c b/TEST/test_sp.c
index a1d8c08..38a1b90 100755
--- a/TEST/test_sp.c
+++ b/TEST/test_sp.c
@@ -57,7 +57,7 @@
 
     /* Print the results */
     printf( "setProperty() rc=%d, msg=%s\n", 
-            status.rc, (status.msg)? (char *)status.msg->hdl : NULL);
+            status.rc, (status.msg)? (char *)status.msg->hdl : "");
 
     if (objectpath) CMRelease(objectpath);
     if (value.string) CMRelease(value.string);
diff --git a/TEST/v2test_ec.c b/TEST/v2test_ec.c
index 05f2f22..e8caf40 100644
--- a/TEST/v2test_ec.c
+++ b/TEST/v2test_ec.c
@@ -19,19 +19,11 @@
     CIMCStatus status;
     CIMCClient *client;
     CIMCObjectPath *op;
-    CMPIConstClass* clas ;
     CIMCEnumeration *enm;
-    CIMCString *path;
-    CMPIString * classname ;
     CIMCData data;
-    CMPIData cdata ;
     char 	*cim_host, *cim_host_passwd, *cim_host_userid , *cim_host_port;
-    int i = 0 ;
     int retc = 0;
     int count = 0;
-    int numproperties = 0;
-    CMPIString * propertyname;
-    char *cv;
     
     /* Setup a connection to the CIMOM */
     cim_host = getenv("CIM_HOST");
@@ -82,7 +74,7 @@
        count = enm->ft->hasNext(enm, NULL) ;
        while (count > 0) {
           data = enm->ft->getNext(enm, NULL);
-          showClass(data.value.cls);          
+          showClass((CMPIConstClass *)data.value.cls);          
           /*
            * see if we have any more
            */
diff --git a/TEST/v2test_ei.c b/TEST/v2test_ei.c
index f27c54a..e1f730f 100644
--- a/TEST/v2test_ei.c
+++ b/TEST/v2test_ei.c
@@ -6,7 +6,6 @@
 #include "cmcimacs.h"
 #include "show.h"
 
-static char * CMPIState_str(CMPIValueState);
 /*
  * comment out this define to use v2 http XML interface
  */
diff --git a/TEST/v2test_ein.c b/TEST/v2test_ein.c
index eb9678d..92bb3af 100644
--- a/TEST/v2test_ein.c
+++ b/TEST/v2test_ein.c
@@ -6,7 +6,6 @@
 #include "cmcimacs.h"
 #include "show.h"
 
-static char * CMPIState_str(CMPIValueState);
 /*
  * comment out this define to use v2 http XML interface
  */
@@ -22,7 +21,6 @@
 CMPIObjectPath *op = NULL ;
 CIMCEnumeration *enm = NULL;
 CIMCClient *client = NULL;
-CIMCInstance *instance = NULL;
 CIMCData data;
 char 	*cim_host, *cim_host_passwd, *cim_host_userid, *cim_host_port;
 int count = 0;
diff --git a/TEST/v2test_im.c b/TEST/v2test_im.c
index f582d0d..05232bf 100644
--- a/TEST/v2test_im.c
+++ b/TEST/v2test_im.c
@@ -36,7 +36,6 @@
   int rc;
 
   CIMCObjectPath	* objectpath;
-  CMPIStatus		status;
   CIMCArgs		* args; 
   char 		*cim_host, *cim_host_passwd, *cim_host_userid, *cim_host_port;
   CIMCData		retval;
@@ -80,13 +79,13 @@
 
     /* Print the results */
     printf( "invokeMethod() rc=%d, msg=%s\n", 
-            status.rc, (status.msg)? (char *)status.msg->hdl : NULL);
+            cstatus.rc, (cstatus.msg)? (char *)cstatus.msg->hdl : NULL);
 
     //    if (args) CMRelease(args);
     printf("release status\n");
-    if (status.msg) CMRelease(status.msg);
+    if (cstatus.msg) cstatus.msg->ft->release(cstatus.msg);
 
-    if (!status.rc) {
+    if (!cstatus.rc) {
       char *cv = value2Chars(retval.type,(CMPIValue*)&(retval.value));
       printf("result(s):\n\treturn value: \"%s\"\n", cv);
     }
diff --git a/TEST/v2test_xq_synerr.c b/TEST/v2test_xq_synerr.c
index 366d80f..e15ee92 100644
--- a/TEST/v2test_xq_synerr.c
+++ b/TEST/v2test_xq_synerr.c
@@ -21,10 +21,7 @@
 CMPIObjectPath *op = NULL ;
 CIMCEnumeration *enm = NULL;
 CIMCClient *client = NULL;
-CIMCInstance *instance = NULL;
-CIMCData data;
 char 	*cim_host, *cim_host_passwd, *cim_host_userid, *cim_host_port;
-int count = 0;
 
     /*
      * Setup a connection to the CIMOM by checking environment 
diff --git a/backend/cimxml/cimXmlParser.c b/backend/cimxml/cimXmlParser.c
index 355e3a5..05822d0 100644
--- a/backend/cimxml/cimXmlParser.c
+++ b/backend/cimxml/cimXmlParser.c
@@ -26,7 +26,6 @@
 #include <cmcidt.h>
 
 #include "cimXmlParser.h"
-#include "grammar.h"
 
 #ifdef DMALLOC
 #include "dmalloc.h"
@@ -48,7 +47,7 @@
 #define TAG(t) t,(sizeof(t)-1)
 
 
-static void Throw(XmlBuffer * xb, char *msg)
+static void __attribute__((__noreturn__)) Throw(XmlBuffer * xb, char *msg)
 {
    printf("*** Error: %s\n", msg);
    exit(1);
diff --git a/backend/cimxml/client.c b/backend/cimxml/client.c
index 855a73c..5c075ed 100644
--- a/backend/cimxml/client.c
+++ b/backend/cimxml/client.c
@@ -232,7 +232,7 @@
     * in lib/connect.c within libcurl for details */ 
    memset(unaddr, 0, caddr->addrlen);
    unaddr->sun_family = AF_UNIX;
-   strncpy(unaddr->sun_path, path, sizeof(unaddr->sun_path));
+   strncpy(unaddr->sun_path, path, sizeof(unaddr->sun_path)-1);
    caddr->protocol = 0; 
    return socket(caddr->family, caddr->socktype, caddr->protocol);
 }
@@ -683,7 +683,7 @@
     CMPIType  valtyp      = data.type & ~CMPI_ARRAY; 
     char      *xmlTypeStr = cmpiToXmlType(valtyp);
     char      *cv;
-    int       i, n;
+    int       i, n = 0;
     /* If empty data item, skip out without outputting */
     if ((data.state & CMPI_nullValue) ||
         (isArray && (n = CMGetArrayCount(data.value.array, NULL)) == 0) )
@@ -930,10 +930,6 @@
                                 CMPIObjectPath * cop, CMPIInstance * inst)
 {
    CMPIString       * cn;
-   int		      i;
-   int                numproperties = inst->ft->getPropertyCount(inst, NULL);
-   CMPIData	      propertydata;
-   CMPIString	    * propertyname;
 
    if (cop == NULL)
        cop = inst->ft->getObjectPath(inst, NULL);
@@ -960,7 +956,8 @@
 static CMCIClient * cloneClient ( CMCIClient * cl, CMPIStatus * st )
 {
   CMPIStatus rc;
-  CMSetStatusWithChars(&rc, CMPI_RC_ERR_NOT_SUPPORTED, "Clone function not supported");
+  CMPIStatus *rcptr = &rc;
+  CMSetStatusWithChars(rcptr, CMPI_RC_ERR_NOT_SUPPORTED, "Clone function not supported");
   if (st) *st=rc;
   return NULL;
 }  
@@ -1203,9 +1200,6 @@
    UtilStringBuffer *sb  = UtilFactory->newStringBuffer(2048);
    char             *error;
    ResponseHdr	    rh;
-   int		    i, numproperties = inst->ft->getPropertyCount(inst, NULL);
-   CMPIString	    *classname, *propertyname;
-   CMPIData	    propertydata;
    CMPIObjectPath   *retval;
 
    START_TIMING(CreateInstance);
@@ -1335,6 +1329,7 @@
    char             *error;
    ResponseHdr      rh;
    CMPIStatus	    rc;
+   CMPIStatus	    *rcptr = &rc;
 
    START_TIMING(ModifyInstance);
    SET_DEBUG();
@@ -1364,7 +1359,7 @@
    error = con->ft->addPayload(con,sb);
 
    if (error || (error = con->ft->getResponse(con, cop))) {
-      CMSetStatusWithChars(&rc,CMPI_RC_ERR_FAILED,error);
+      CMSetStatusWithChars(rcptr,CMPI_RC_ERR_FAILED,error);
       free(error);
       CMRelease(sb);
       END_TIMING(_T_FAILED);
@@ -1382,12 +1377,12 @@
 
    rh = scanCimXmlResponse(CMGetCharPtr(con->mResponse), cop);
    if (rh.errCode != 0) {
-      CMSetStatusWithChars(&rc, rh.errCode, rh.description);
+      CMSetStatusWithChars(rcptr, rh.errCode, rh.description);
       free(rh.description);
       CMRelease(rh.rvArray);
    }
    else
-   CMSetStatus(&rc, CMPI_RC_OK);
+   CMSetStatus(rcptr, CMPI_RC_OK);
 
    END_TIMING(_T_GOOD);
    return rc;
@@ -1431,6 +1426,7 @@
    ResponseHdr		rh;
    CMPIString		*classname;
    CMPIStatus		rc;
+   CMPIStatus           *rcptr = &rc;
 
    START_TIMING(DeleteInstance);
    SET_DEBUG();
@@ -1459,7 +1455,7 @@
    error = con->ft->addPayload(con,sb);
 
    if (error || (error = con->ft->getResponse(con, cop))) {
-      CMSetStatusWithChars(&rc,CMPI_RC_ERR_FAILED,error);
+      CMSetStatusWithChars(rcptr,CMPI_RC_ERR_FAILED,error);
       free(error);
       CMRelease(sb);
       END_TIMING(_T_FAILED);
@@ -1477,12 +1473,12 @@
 
    rh = scanCimXmlResponse(CMGetCharPtr(con->mResponse), cop);
    if (rh.errCode != 0) {
-      CMSetStatusWithChars(&rc, rh.errCode, rh.description);
+      CMSetStatusWithChars(rcptr, rh.errCode, rh.description);
       free(rh.description);
       CMRelease(rh.rvArray);
    }
    else
-   CMSetStatus(&rc, CMPI_RC_OK);
+   CMSetStatus(rcptr, CMPI_RC_OK);
 
    END_TIMING(_T_GOOD);
    return rc;
@@ -2161,7 +2157,6 @@
    CMPIString		*cn;
    CMPIData		retval= { 0, CMPI_nullValue, {0} };
    int			i, numinargs = 0;
-   char                 *cv;
 
    START_TIMING(method);
    SET_DEBUG();
@@ -2192,9 +2187,9 @@
 
    /* Add the input parameters */
    for (i = 0; i < numinargs; i++) {
-      CMPIString * argname, * name;
+      CMPIString * argname;
       CMPIData argdata = in->ft->getArgAt(in, i, &argname, NULL);
-      CMPIObjectPath *argcop;
+
       // Output XML for IN arg values, specific by type
       switch (argdata.type & ~CMPI_ARRAY) {
          case CMPI_boolean:
@@ -2259,8 +2254,6 @@
              break;
          default:
 
-           not_supported:
-
 	     CMSetStatusWithChars(rc, CMPI_RC_ERR_FAILED,
                                   strdup("Unsupported IN argument type"));
              retval.state = CMPI_notFound | CMPI_nullValue;
@@ -2387,6 +2380,7 @@
    ResponseHdr      rh;
    CMPIString	    *cn;
    CMPIStatus	    rc = {CMPI_RC_OK, NULL};
+   CMPIStatus       *rcptr = &rc;
    char             *cv;
 
    START_TIMING(SetProperty);
@@ -2424,7 +2418,7 @@
    error = con->ft->addPayload(con,sb);
 
    if (error || (error = con->ft->getResponse(con, cop))) {
-      CMSetStatusWithChars(&rc,CMPI_RC_ERR_FAILED,error);
+      CMSetStatusWithChars(rcptr,CMPI_RC_ERR_FAILED,error);
       free(error);
       CMRelease(sb);
       END_TIMING(_T_FAILED);
@@ -2443,7 +2437,7 @@
    rh = scanCimXmlResponse(CMGetCharPtr(con->mResponse),cop);
 
    if (rh.errCode != 0) {
-      CMSetStatusWithChars(&rc, rh.errCode, rh.description);
+      CMSetStatusWithChars(rcptr, rh.errCode, rh.description);
       free(rh.description);
    }
    
@@ -2894,8 +2888,6 @@
 
 static void *releaseEnv(CIMCEnv *env)
 {
-  CMPIStatus rc = {CMPI_RC_OK,NULL};
-  
   if (!(env->options & CIMC_NO_CURL_INIT)) {
     curl_global_cleanup();
   }
diff --git a/backend/cimxml/datetime.c b/backend/cimxml/datetime.c
index a1a131c..a419a5c 100644
--- a/backend/cimxml/datetime.c
+++ b/backend/cimxml/datetime.c
@@ -172,7 +172,7 @@
 
    else {
 		struct tm tm_time;
-		char us_utc_time[11];
+		char us_utc_time[26];
 
 		if ( localtime_r ( &secs, &tm_time ) == NULL ) {
          CMSetStatus(rc, CMPI_RC_ERR_FAILED);
@@ -181,7 +181,7 @@
 
 		tzset ();
 
-		snprintf ( us_utc_time, 11, "%6.6ld%+4.3ld", 
+		snprintf ( us_utc_time, 26, "%6.6ld%+4.3ld",
 			   usecs, ( daylight != 0 ) * 60 - timezone / 60 );
 
 		strftime ( str_time, 26, "%Y%m%d%H%M%S.", &tm_time );
diff --git a/backend/cimxml/indicationlistener.c b/backend/cimxml/indicationlistener.c
index 0086cf2..a211c2b 100755
--- a/backend/cimxml/indicationlistener.c
+++ b/backend/cimxml/indicationlistener.c
@@ -265,7 +265,6 @@
 static void handleConnection(int connFd, struct native_indicationlistener *i)
 {
     Buffer inBuf = { NULL, NULL, 0, 0, 0, 0, 0 ,0};
-    int badReq = 0;
     int discardInput=0;
     char *path, *hdr;
     char *cp;
@@ -320,7 +319,7 @@
     }
     
     inBuf.httpHdr = getNextHdr(&inBuf);
-    for (badReq = 1;;) {
+    for (;;) {
         if (inBuf.httpHdr == NULL) {
             break;
         }
@@ -335,7 +334,6 @@
         if (inBuf.protocol == NULL) {
             break;
         }
-        badReq = 0;
     }
     
     while ((hdr = getNextHdr(&inBuf)) != NULL) {
diff --git a/backend/cimxml/parserUtil.c b/backend/cimxml/parserUtil.c
index 7b15405..1d51aff 100644
--- a/backend/cimxml/parserUtil.c
+++ b/backend/cimxml/parserUtil.c
@@ -27,9 +27,6 @@
 #include "cimXmlParser.h"
 #include "sfcUtil/utilft.h"
 
-static int ct = 0;
-static int dontLex = 0;
-
 extern CMPIConstClass * native_new_CMPIConstClass ( char  *cn, CMPIStatus * rc );
 extern int addClassProperty( CMPIConstClass * ccls, char * name,
                  CMPIValue * value, CMPIType type,
@@ -58,7 +55,7 @@
 extern int do_debug;
 #endif
 
-static inline int isBoolean(CMPIData data)
+int isBoolean(CMPIData data)
 {
    if (data.type == CMPI_chars) {
       if (strcasecmp(data.value.chars,"true") == 0) return 0xffff;
@@ -94,7 +91,7 @@
    CMPIType   type = CMPI_null;
    XtokQualifier *nq = NULL,*q;
    XtokQualifiers *qs;
-   int rc, n, setq;
+   int setq;
 
    while (p) {
       setq=1;
@@ -151,12 +148,13 @@
             setq = 0;
          }
          break;
+      case typeProperty_Unknown:
+         break;
       }
 
       if (setq) {
          qs=&p->val.qualifiers;
          q=qs ? qs->first : NULL;  
-         n=0;   
          while (q) {
             if (q->type & CMPI_ARRAY) {
                CMPIArray *arr = NULL;
@@ -170,13 +168,13 @@
                   native_release_CMPIValue(type,&val);
                }
                }
-               rc = addInstPropertyQualifier(ci, p->name, q->name,
+               (void)addInstPropertyQualifier(ci, p->name, q->name,
                          (CMPIValue *)&arr, q->type); 
                native_release_CMPIValue(q->type,(CMPIValue*)&arr);
             }
             else {
                val = str2CMPIValue(q->type, q->data.value.data.value, NULL);
-               rc= addInstPropertyQualifier(ci, p->name, q->name, &val, q->type);
+               (void)addInstPropertyQualifier(ci, p->name, q->name, &val, q->type);
                native_release_CMPIValue(q->type,&val);
             }   
             nq = q->next; 
@@ -197,7 +195,6 @@
 {
    XtokQualifier *nq = NULL,*q = qs ? qs->first : NULL;
    CMPIValue val;
-   int rc;
    
    while (q) {
       if (q->type & CMPI_ARRAY) {
@@ -210,13 +207,13 @@
                   CMSetArrayElementAt(arr, i, &val, type);
                   native_release_CMPIValue(type,&val);
                }
-               rc = addInstQualifier(ci, q->name, (CMPIValue*)&arr, q->type);
+               (void)addInstQualifier(ci, q->name, (CMPIValue*)&arr, q->type);
                native_release_CMPIValue(q->type,(CMPIValue*)&arr);
       }
       }
       else {
          val = str2CMPIValue(q->type, q->data.value.data.value, NULL);
-         rc = addInstQualifier(ci, q->name, &val, q->type);
+         (void)addInstQualifier(ci, q->name, &val, q->type);
          native_release_CMPIValue( q->type,&val);
       }
       nq = q->next;
@@ -236,7 +233,6 @@
    XtokQualifiers *qs;
    XtokParam      *np,*p;
    XtokParams     *ps;
-   int rc, n;
 
    val.uint64=0l;
    while (m) {
@@ -244,7 +240,6 @@
 
       qs=&m->qualifiers;
       q=qs ? qs->first : NULL;
-      n=0;
       while (q) {
          if (q->type & CMPI_ARRAY) {
             CMPIType type=q->type&~CMPI_ARRAY;
@@ -258,12 +253,12 @@
                }
             }
             val.array = arr;
-            rc = addClassMethodQualifier(cls, m->name, q->name, &val, q->type);
+            (void)addClassMethodQualifier(cls, m->name, q->name, &val, q->type);
             native_release_CMPIValue(q->type,(CMPIValue*)&arr);
          }
          else {
             val = str2CMPIValue(q->type, q->data.value.data.value, NULL);
-            rc= addClassMethodQualifier(cls, m->name, q->name, &val, q->type);
+            (void)addClassMethodQualifier(cls, m->name, q->name, &val, q->type);
             native_release_CMPIValue(q->type,&val);
          }
          nq = q->next; 
@@ -272,9 +267,8 @@
 
       ps=&m->params;
       p=ps ? ps->first : NULL;
-      n=0;
       while (p) {
-         rc= addClassMethodParameter(cls, m->name, p->name, p->type);
+         (void)addClassMethodParameter(cls, m->name, p->name, p->type);
          np = p->next; 
          p = np;
       }
@@ -292,7 +286,6 @@
    CMPIArray       *arr = NULL;
    XtokQualifier   *nq,*q;
    XtokQualifiers *qs;
-   int rc, n;
 
       val.uint64=0l;
    while (p) {
@@ -308,11 +301,12 @@
      addClassProperty(cls, p->name, &val,
                                p->valueType | CMPI_ARRAY, CMPI_nullValue);
          break;
+      case typeProperty_Unknown:
+         break;
       }
 
       qs=&p->val.qualifiers;
       q=qs ? qs->first : NULL;  
-      n=0;   
       while (q) {
          if (q->type & CMPI_ARRAY) {
             CMPIType type=q->type&~CMPI_ARRAY;
@@ -326,12 +320,12 @@
             }
             }
             val.array = arr;
-            rc = addClassPropertyQualifier(cls, p->name, q->name, &val, q->type); 
+            (void)addClassPropertyQualifier(cls, p->name, q->name, &val, q->type); 
             native_release_CMPIValue(q->type,(CMPIValue*)&arr);
          }
          else {
             val = str2CMPIValue(q->type, q->data.value.data.value, NULL);
-            rc= addClassPropertyQualifier(cls, p->name, q->name, &val, q->type);
+            (void)addClassPropertyQualifier(cls, p->name, q->name, &val, q->type);
             native_release_CMPIValue(q->type,&val);
          }   
          nq = q->next; 
@@ -348,7 +342,6 @@
 {
    XtokQualifier *nq = NULL,*q = qs ? qs->first : NULL;
    CMPIValue val;
-   int rc;
    
    while (q) {
       if (q->type & CMPI_ARRAY) {
@@ -369,7 +362,7 @@
                   CMSetArrayElementAt(arr, i, &val, type);
                   native_release_CMPIValue(type,&val);
                }
-               rc = addClassQualifier(cls, q->name, (CMPIValue*)&arr, q->type);
+               (void)addClassQualifier(cls, q->name, (CMPIValue*)&arr, q->type);
                native_release_CMPIValue(q->type,(CMPIValue*)&arr);
       }
       }
@@ -383,7 +376,7 @@
           }
           else
               val = str2CMPIValue(q->type, valStr, NULL);
-         rc = addClassQualifier(cls, q->name, &val, q->type);
+         (void)addClassQualifier(cls, q->name, &val, q->type);
          native_release_CMPIValue( q->type,&val);
       }
       nq = q->next;
diff --git a/backend/cimxml/parserUtil.h b/backend/cimxml/parserUtil.h
index 774a307..e8ad791 100644
--- a/backend/cimxml/parserUtil.h
+++ b/backend/cimxml/parserUtil.h
@@ -26,7 +26,7 @@
 
 extern CMPIConstClass * native_new_CMPIConstClass ( char  *cn, CMPIStatus * rc );
 
-static inline int isBoolean(CMPIData data);
+int isBoolean(CMPIData data);
 void createPath(CMPIObjectPath **op, XtokInstanceName *p);
 void setInstProperties(CMPIInstance *ci, XtokProperties *ps);
 void setInstQualifiers(CMPIInstance *ci, XtokQualifiers *qs);
diff --git a/backend/cimxml/string.c b/backend/cimxml/string.c
index 152e79e..526b62e 100644
--- a/backend/cimxml/string.c
+++ b/backend/cimxml/string.c
@@ -51,7 +51,7 @@
 static CMPIStatus __sft_release ( CMPIString * string )
 {
 	struct native_string * s = (struct native_string *) string;
-int i;
+
 //	for (i=0; i<strTabNext; i++) if (strTab[i]==string) { strTab[i]=NULL; break; }
         if ( s ) {
 
diff --git a/backend/cimxml/value.c b/backend/cimxml/value.c
index 026328d..08cf612 100644
--- a/backend/cimxml/value.c
+++ b/backend/cimxml/value.c
@@ -150,7 +150,6 @@
 static char *value2CharsUri(CMPIType type, CMPIValue * value, int uri)
 {
    char str[2048], *p;
-   unsigned int size;
    CMPIString *cStr;
 
    str[0]=0;
@@ -286,7 +285,6 @@
          char *hn="",*ns="",*cn;
          CMPIType type = 0;
          CMPIValue v, *valp;
-         int i,m;
          XtokInstanceName *in; 
          
          switch(ref->type) {
@@ -361,7 +359,7 @@
 
 CMPIValue str2CMPIValue(CMPIType type, char *val, XtokValueReference *ref)
 {
-   CMPIValue value,*valp;
+   CMPIValue value;
  //  char *val=p->value;
    CMPIType t;
 
@@ -445,7 +443,7 @@
       value.dateTime = native_new_CMPIDateTime_fromChars(val, NULL);
       break;
    case CMPI_ref:
-      valp=getKeyValueTypePtr("ref", NULL, ref, &value, &t);
+      (void)getKeyValueTypePtr("ref", NULL, ref, &value, &t);
       break;
    case CMPI_instance:
       value.inst=getInstFromEmbedded((XtokInstance*)val);
diff --git a/frontend/sfcc/sfcclient.c b/frontend/sfcc/sfcclient.c
index adbe355..6b97474 100644
--- a/frontend/sfcc/sfcclient.c
+++ b/frontend/sfcc/sfcclient.c
@@ -227,7 +227,6 @@
 {
 #define SBUFLEN 32
    char str[SBUFLEN], *p;
-   unsigned int size;
    CMPIString *cStr;
 
    str[0]=0;
