diff --git a/activemq-cpp/src/main/activemq/commands/ActiveMQBytesMessage.cpp b/activemq-cpp/src/main/activemq/commands/ActiveMQBytesMessage.cpp
index d8cd596..a630816 100644
--- a/activemq-cpp/src/main/activemq/commands/ActiveMQBytesMessage.cpp
+++ b/activemq-cpp/src/main/activemq/commands/ActiveMQBytesMessage.cpp
@@ -243,7 +243,7 @@
 
     initializeReading();
     try {
-        return this->dataIn->readByte();
+        return (unsigned char) this->dataIn->readByte();
     } catch (EOFException& ex) {
         throw CMSExceptionSupport::createMessageEOFException(ex);
     } catch (IOException& ex) {
diff --git a/activemq-cpp/src/main/activemq/commands/ActiveMQObjectMessage.cpp b/activemq-cpp/src/main/activemq/commands/ActiveMQObjectMessage.cpp
index 112320f..77e14ce 100644
--- a/activemq-cpp/src/main/activemq/commands/ActiveMQObjectMessage.cpp
+++ b/activemq-cpp/src/main/activemq/commands/ActiveMQObjectMessage.cpp
@@ -129,7 +129,7 @@
                     return std::vector<unsigned char>();
                 }
 
-                uncompressed.resize(length);
+                uncompressed.resize((std::size_t) length);
             } catch (IOException& ex) {
                 throw CMSExceptionSupport::create(ex);
             }
diff --git a/activemq-cpp/src/main/activemq/commands/ActiveMQStreamMessage.cpp b/activemq-cpp/src/main/activemq/commands/ActiveMQStreamMessage.cpp
index b38ba71..1edbc8d 100644
--- a/activemq-cpp/src/main/activemq/commands/ActiveMQStreamMessage.cpp
+++ b/activemq-cpp/src/main/activemq/commands/ActiveMQStreamMessage.cpp
@@ -249,7 +249,7 @@
             throw MessageEOFException("reached end of data", NULL);
         }
         if (type == PrimitiveValueNode::BYTE_TYPE) {
-            return this->dataIn->readByte();
+            return (unsigned char) this->dataIn->readByte();
         }
         if (type == PrimitiveValueNode::STRING_TYPE) {
             return Byte::valueOf(this->dataIn->readUTF()).byteValue();
@@ -628,10 +628,10 @@
             return this->dataIn->readUnsignedShort();
         }
         if (type == PrimitiveValueNode::BYTE_TYPE) {
-            return this->dataIn->readByte();
+            return (unsigned char) this->dataIn->readByte();
         }
         if (type == PrimitiveValueNode::STRING_TYPE) {
-            return Short::valueOf(this->dataIn->readUTF()).shortValue();
+            return (unsigned short) Short::valueOf(this->dataIn->readUTF()).shortValue();
         }
 
         if (type == PrimitiveValueNode::NULL_TYPE) {
@@ -832,7 +832,7 @@
             return Short(this->dataIn->readShort()).toString();
         }
         if (type == PrimitiveValueNode::BYTE_TYPE) {
-            return Byte(this->dataIn->readByte()).toString();
+            return Byte((unsigned char) this->dataIn->readByte()).toString();
         }
         if (type == PrimitiveValueNode::FLOAT_TYPE) {
             return Float(this->dataIn->readFloat()).toString();
diff --git a/activemq-cpp/src/main/activemq/core/ActiveMQTransactionContext.cpp b/activemq-cpp/src/main/activemq/core/ActiveMQTransactionContext.cpp
index dbd81b3..1a155e6 100644
--- a/activemq-cpp/src/main/activemq/core/ActiveMQTransactionContext.cpp
+++ b/activemq-cpp/src/main/activemq/core/ActiveMQTransactionContext.cpp
@@ -715,8 +715,8 @@
         return false;
     } else {
 
-        std::vector<unsigned char> localBQual(Xid::MAXBQUALSIZE);
-        std::vector<unsigned char> remoteBQual(Xid::MAXBQUALSIZE);
+        std::vector<unsigned char> localBQual((std::size_t) Xid::MAXBQUALSIZE);
+        std::vector<unsigned char> remoteBQual((std::size_t) Xid::MAXBQUALSIZE);
 
         local->getBranchQualifier(&localBQual[0], Xid::MAXBQUALSIZE);
         remote->getBranchQualifier(&remoteBQual[0], Xid::MAXBQUALSIZE);
@@ -725,8 +725,8 @@
             return false;
         }
 
-        std::vector<unsigned char> localGTXID(Xid::MAXBQUALSIZE);
-        std::vector<unsigned char> remoteGTXID(Xid::MAXBQUALSIZE);
+        std::vector<unsigned char> localGTXID((std::size_t) Xid::MAXBQUALSIZE);
+        std::vector<unsigned char> remoteGTXID((std::size_t) Xid::MAXBQUALSIZE);
 
         local->getGlobalTransactionId(&localGTXID[0], Xid::MAXGTRIDSIZE);
         remote->getGlobalTransactionId(&remoteGTXID[0], Xid::MAXGTRIDSIZE);
diff --git a/activemq-cpp/src/main/activemq/core/FifoMessageDispatchChannel.cpp b/activemq-cpp/src/main/activemq/core/FifoMessageDispatchChannel.cpp
index 8099992..0a773aa 100644
--- a/activemq-cpp/src/main/activemq/core/FifoMessageDispatchChannel.cpp
+++ b/activemq-cpp/src/main/activemq/core/FifoMessageDispatchChannel.cpp
@@ -69,7 +69,7 @@
             if (timeout == -1) {
                 channel.wait();
             } else {
-                channel.wait((unsigned long) timeout);
+                channel.wait(timeout);
                 break;
             }
         }
diff --git a/activemq-cpp/src/main/activemq/core/SimplePriorityMessageDispatchChannel.cpp b/activemq-cpp/src/main/activemq/core/SimplePriorityMessageDispatchChannel.cpp
index d3390d4..ddcb80e 100644
--- a/activemq-cpp/src/main/activemq/core/SimplePriorityMessageDispatchChannel.cpp
+++ b/activemq-cpp/src/main/activemq/core/SimplePriorityMessageDispatchChannel.cpp
@@ -36,7 +36,7 @@
 
 ////////////////////////////////////////////////////////////////////////////////
 SimplePriorityMessageDispatchChannel::SimplePriorityMessageDispatchChannel() :
-    closed(false), running(false), mutex(), channels(MAX_PRIORITIES), enqueued(0) {
+    closed(false), running(false), mutex(), channels((std::size_t) MAX_PRIORITIES), enqueued(0) {
 }
 
 ////////////////////////////////////////////////////////////////////////////////
diff --git a/activemq-cpp/src/main/decaf/util/LinkedList.h b/activemq-cpp/src/main/decaf/util/LinkedList.h
index bb7f42d..149a736 100644
--- a/activemq-cpp/src/main/decaf/util/LinkedList.h
+++ b/activemq-cpp/src/main/decaf/util/LinkedList.h
@@ -280,7 +280,7 @@
         virtual std::vector<E> toArray() const {
 
             std::vector<E> result;
-            result.reserve(this->listSize);
+            result.reserve((std::size_t) this->listSize);
 
             const ListNode<E>* current = this->head.next;
 
