- added Int/UInt typedef in Json namespace. Modified Value::Int and Value::UInt to be typedef on those. Modified code to use Json::Int instead of Value::Int.
- added Value constructor taking begin/end pointer to initialize the Value with a non-zero terminated string.

diff --git a/include/json/forwards.h b/include/json/forwards.h
index ee76071..d0ce830 100644
--- a/include/json/forwards.h
+++ b/include/json/forwards.h
@@ -5,14 +5,19 @@
 
 namespace Json {
 
+   // writer.h
    class FastWriter;
-   class Reader;
    class StyledWriter;
 
+   // reader.h
+   class Reader;
+
    // features.h
    class Features;
 
    // value.h
+   typedef int Int;
+   typedef unsigned int UInt;
    class StaticString;
    class Path;
    class PathArgument;
diff --git a/include/json/value.h b/include/json/value.h
index ce3d3cd..d575b70 100644
--- a/include/json/value.h
+++ b/include/json/value.h
@@ -117,10 +117,10 @@
 # endif
    public:
       typedef std::vector<std::string> Members;
-      typedef int Int;
-      typedef unsigned int UInt;
       typedef ValueIterator iterator;
       typedef ValueConstIterator const_iterator;
+      typedef Json::UInt UInt;
+      typedef Json::Int Int;
       typedef UInt ArrayIndex;
 
       static const Value null;
@@ -186,6 +186,7 @@
       Value( UInt value );
       Value( double value );
       Value( const char *value );
+      Value( const char *beginValue, const char *endValue );
       /** \brief Constructs a value from a static string.
 
        * Like other value string constructor but do not duplicate the string for
@@ -453,7 +454,7 @@
       friend class Path;
 
       PathArgument();
-      PathArgument( Value::UInt index );
+      PathArgument( UInt index );
       PathArgument( const char *key );
       PathArgument( const std::string &key );
 
@@ -465,7 +466,7 @@
          kindKey
       };
       std::string key_;
-      Value::UInt index_;
+      UInt index_;
       Kind kind_;
    };
 
@@ -909,7 +910,7 @@
       Value key() const;
 
       /// Return the index of the referenced Value. -1 if it is not an arrayValue.
-      Value::UInt index() const;
+      UInt index() const;
 
       /// Return the member name of the referenced Value. "" if it is not an objectValue.
       const char *memberName() const;
diff --git a/include/json/writer.h b/include/json/writer.h
index cfa92c6..5f4b83b 100644
--- a/include/json/writer.h
+++ b/include/json/writer.h
@@ -157,8 +157,8 @@
       bool addChildValues_;
    };
 
-   std::string JSON_API valueToString( Value::Int value );
-   std::string JSON_API valueToString( Value::UInt value );
+   std::string JSON_API valueToString( Int value );
+   std::string JSON_API valueToString( UInt value );
    std::string JSON_API valueToString( double value );
    std::string JSON_API valueToString( bool value );
    std::string JSON_API valueToQuotedString( const char *value );
diff --git a/src/lib_json/json_value.cpp b/src/lib_json/json_value.cpp
index 734bf16..573205f 100644
--- a/src/lib_json/json_value.cpp
+++ b/src/lib_json/json_value.cpp
@@ -20,9 +20,9 @@
 namespace Json {
 
 const Value Value::null;
-const Value::Int Value::minInt = Value::Int( ~(Value::UInt(-1)/2) );
-const Value::Int Value::maxInt = Value::Int( Value::UInt(-1)/2 );
-const Value::UInt Value::maxUInt = Value::UInt(-1);
+const Int Value::minInt = Int( ~(UInt(-1)/2) );
+const Int Value::maxInt = Int( UInt(-1)/2 );
+const UInt Value::maxUInt = UInt(-1);
 
 // A "safe" implementation of strdup. Allow null pointer to be passed. 
 // Also avoid warning on msvc80.
@@ -351,6 +351,21 @@
    value_.string_ = valueAllocator()->duplicateStringValue( value );
 }
 
+
+Value::Value( const char *beginValue, 
+              const char *endValue )
+   : type_( stringValue )
+   , allocated_( true )
+   , comments_( 0 )
+# ifdef JSON_VALUE_USE_INTERNAL_MAP
+   , itemIsUsed_( 0 )
+#endif
+{
+   value_.string_ = valueAllocator()->duplicateStringValue( beginValue, 
+                                                            UInt(endValue - beginValue) );
+}
+
+
 Value::Value( const std::string &value )
    : type_( stringValue )
    , allocated_( true )
diff --git a/src/lib_json/json_valueiterator.inl b/src/lib_json/json_valueiterator.inl
index 898c358..736e260 100644
--- a/src/lib_json/json_valueiterator.inl
+++ b/src/lib_json/json_valueiterator.inl
@@ -176,7 +176,7 @@
 }
 
 
-Value::UInt 
+UInt 
 ValueIteratorBase::index() const
 {
 #ifndef JSON_VALUE_USE_INTERNAL_MAP
diff --git a/src/lib_json/json_writer.cpp b/src/lib_json/json_writer.cpp
index f2f8311..cdf4188 100644
--- a/src/lib_json/json_writer.cpp
+++ b/src/lib_json/json_writer.cpp
@@ -39,14 +39,14 @@
    while ( value != 0 );
 }
 
-std::string valueToString( Value::Int value )
+std::string valueToString( Int value )
 {
    char buffer[32];
    char *current = buffer + sizeof(buffer);
    bool isNegative = value < 0;
    if ( isNegative )
       value = -value;
-   uintToString( Value::UInt(value), current );
+   uintToString( UInt(value), current );
    if ( isNegative )
       *--current = '-';
    assert( current >= buffer );
@@ -54,7 +54,7 @@
 }
 
 
-std::string valueToString( Value::UInt value )
+std::string valueToString( UInt value )
 {
    char buffer[32];
    char *current = buffer + sizeof(buffer);