diff --git a/src/33_3_Initializing_the_Solver.jl b/src/33_3_Initializing_the_Solver.jl
index 0074d92..74f1e35 100644
--- a/src/33_3_Initializing_the_Solver.jl
+++ b/src/33_3_Initializing_the_Solver.jl
@@ -98,7 +98,7 @@ function root_fsolver_name(s::Ptr{gsl_root_fsolver})
     output_string = output_ptr = ccall( (:gsl_root_fsolver_name, libgsl),
         Ptr{Cchar}, (Ptr{gsl_root_fsolver}, ), s )
     output_ptr==C_NULL ? throw(GSL_ERROR(8)) : output_ptr
-    bytestring(output_string)
+    unsafe_string(output_string)
 end
 
 
@@ -111,5 +111,5 @@ function root_fdfsolver_name(s::Ptr{gsl_root_fdfsolver})
     output_string = output_ptr = ccall( (:gsl_root_fdfsolver_name,
         libgsl), Ptr{Cchar}, (Ptr{gsl_root_fdfsolver}, ), s )
     output_ptr==C_NULL ? throw(GSL_ERROR(8)) : output_ptr
-    bytestring(output_string)
+    unsafe_string(output_string)
 end
diff --git a/src/34_3_Initializing_the_Minimizer.jl b/src/34_3_Initializing_the_Minimizer.jl
index d782daa..28b01c9 100644
--- a/src/34_3_Initializing_the_Minimizer.jl
+++ b/src/34_3_Initializing_the_Minimizer.jl
@@ -77,5 +77,5 @@ function min_fminimizer_name(s::Ptr{gsl_min_fminimizer})
     output_string = output_ptr = ccall( (:gsl_min_fminimizer_name,
         libgsl), Ptr{Cchar}, (Ptr{gsl_min_fminimizer}, ), s )
     output_ptr==C_NULL ? throw(GSL_ERROR(8)) : output_ptr
-    bytestring(output_string)
+    unsafe_string(output_string)
 end
diff --git a/src/35_2_Initializing_the_Solver.jl b/src/35_2_Initializing_the_Solver.jl
index 3d97004..619e945 100644
--- a/src/35_2_Initializing_the_Solver.jl
+++ b/src/35_2_Initializing_the_Solver.jl
@@ -109,7 +109,7 @@ function multiroot_fsolver_name(s::Ptr{gsl_multiroot_fsolver})
     output_string = output_ptr = ccall( (:gsl_multiroot_fsolver_name,
         libgsl), Ptr{Cchar}, (Ptr{gsl_multiroot_fsolver}, ), s )
     output_ptr==C_NULL ? throw(GSL_ERROR(8)) : output_ptr
-    bytestring(output_string)
+    unsafe_string(output_string)
 end
 
 
@@ -123,5 +123,5 @@ function multiroot_fdfsolver_name(s::Ptr{gsl_multiroot_fdfsolver})
     output_string = output_ptr = ccall( (:gsl_multiroot_fdfsolver_name,
         libgsl), Ptr{Cchar}, (Ptr{gsl_multiroot_fdfsolver}, ), s )
     output_ptr==C_NULL ? throw(GSL_ERROR(8)) : output_ptr
-    bytestring(output_string)
+    unsafe_string(output_string)
 end
diff --git a/src/36_3_Initializing_the_Multidimensional_Minimizer.jl b/src/36_3_Initializing_the_Multidimensional_Minimizer.jl
index 648942b..3bdba8c 100644
--- a/src/36_3_Initializing_the_Multidimensional_Minimizer.jl
+++ b/src/36_3_Initializing_the_Multidimensional_Minimizer.jl
@@ -106,7 +106,7 @@ function multimin_fdfminimizer_name(s::Ptr{gsl_multimin_fdfminimizer})
     output_string = output_ptr = ccall( (:gsl_multimin_fdfminimizer_name,
         libgsl), Ptr{Cchar}, (Ptr{gsl_multimin_fdfminimizer}, ), s )
     output_ptr==C_NULL ? throw(GSL_ERROR(8)) : output_ptr
-    bytestring(output_string)
+    unsafe_string(output_string)
 end
 
 
@@ -120,5 +120,5 @@ function multimin_fminimizer_name(s::Ptr{gsl_multimin_fminimizer})
     output_string = output_ptr = ccall( (:gsl_multimin_fminimizer_name,
         libgsl), Ptr{Cchar}, (Ptr{gsl_multimin_fminimizer}, ), s )
     output_ptr==C_NULL ? throw(GSL_ERROR(8)) : output_ptr
-    bytestring(output_string)
+    unsafe_string(output_string)
 end
diff --git a/src/ConvertGSL.jl b/src/ConvertGSL.jl
index 3e0c81d..7f69fef 100644
--- a/src/ConvertGSL.jl
+++ b/src/ConvertGSL.jl
@@ -16,7 +16,7 @@ complex_packed_ptr(c::Vector{Cdouble}) = ComplexF64[c[2i-1]+im*c[2i] for i=1:int
 #Register this error handler as GSL's default
 #where possible, maps errors to Julia's own exceptions
 custom_error_handler(reason::Ptr{UInt8}, file::Ptr{UInt8}, line::Integer, errno::Integer) =
-    custom_error_handler(bytestring(reason), bytestring(file), line, errno)
+    custom_error_handler(unsafe_string(reason), unsafe_string(file), line, errno)
 
 mutable struct GSLError <: Exception
     errno :: Int32
diff --git a/src/_18_5_Auxiliary_random_number_generator_functions.jl b/src/_18_5_Auxiliary_random_number_generator_functions.jl
index 8dcb62b..6f1bad4 100644
--- a/src/_18_5_Auxiliary_random_number_generator_functions.jl
+++ b/src/_18_5_Auxiliary_random_number_generator_functions.jl
@@ -22,7 +22,7 @@ function rng_name(r::Ref{gsl_rng})
     output_string = output_ptr = ccall( (:gsl_rng_name, libgsl),
         Ref{Cchar}, (Ref{gsl_rng}, ), r )
     output_ptr==C_NULL ? throw(GSL_ERROR(8)) : output_ptr
-    bytestring(output_string)
+    unsafe_string(output_string)
 end
 
 
diff --git a/src/_19_3_Auxiliary_quasi-random_number_generator_functions.jl b/src/_19_3_Auxiliary_quasi-random_number_generator_functions.jl
index 5e0580f..3bed3a8 100644
--- a/src/_19_3_Auxiliary_quasi-random_number_generator_functions.jl
+++ b/src/_19_3_Auxiliary_quasi-random_number_generator_functions.jl
@@ -16,7 +16,7 @@ function qrng_name(q::Ref{gsl_qrng})
     output_string = output_ptr = ccall( (:gsl_qrng_name, libgsl),
         Ref{Cchar}, (Ref{gsl_qrng}, ), q )
     output_ptr==C_NULL ? throw(GSL_ERROR(8)) : output_ptr
-    bytestring(output_string)
+    unsafe_string(output_string)
 end
 
 
diff --git a/src/_26_2_Stepping_Functions.jl b/src/_26_2_Stepping_Functions.jl
index 5bef507..6a8297a 100644
--- a/src/_26_2_Stepping_Functions.jl
+++ b/src/_26_2_Stepping_Functions.jl
@@ -57,7 +57,7 @@ function odeiv2_step_name(s::Ref{gsl_odeiv2_step})
     output_string = output_ptr = ccall( (:gsl_odeiv2_step_name, libgsl),
         Ptr{Cchar}, (Ref{gsl_odeiv2_step}, ), s )
     output_ptr==C_NULL ? throw(GSL_ERROR(8)) : output_ptr
-    bytestring(output_string)
+    unsafe_string(output_string)
 end
 
 
diff --git a/src/_26_3_Adaptive_Step-size_Control.jl b/src/_26_3_Adaptive_Step-size_Control.jl
index 1bf959f..6a85931 100644
--- a/src/_26_3_Adaptive_Step-size_Control.jl
+++ b/src/_26_3_Adaptive_Step-size_Control.jl
@@ -148,7 +148,7 @@ function odeiv2_control_name(c::Ref{gsl_odeiv2_control})
     output_string = output_ptr = ccall( (:gsl_odeiv2_control_name,
         libgsl), Ptr{Cchar}, (Ref{gsl_odeiv2_control}, ), c )
     output_ptr==C_NULL ? throw(GSL_ERROR(8)) : output_ptr
-    bytestring(output_string)
+    unsafe_string(output_string)
 end
 
 
diff --git a/src/_27_3_Interpolation_Types.jl b/src/_27_3_Interpolation_Types.jl
index a34325e..fdae79c 100644
--- a/src/_27_3_Interpolation_Types.jl
+++ b/src/_27_3_Interpolation_Types.jl
@@ -16,7 +16,7 @@ function interp_name(interp::Ref{gsl_interp})
     output_string = output_ptr = ccall( (:gsl_interp_name, libgsl),
         Ptr{Cchar}, (Ref{gsl_interp}, ), interp )
     output_ptr==C_NULL ? throw(GSL_ERROR(8)) : output_ptr
-    bytestring(output_string)
+    unsafe_string(output_string)
 end
 
 
diff --git a/src/_27_6_Higher-level_Interface.jl b/src/_27_6_Higher-level_Interface.jl
index 33f2194..cc710f5 100644
--- a/src/_27_6_Higher-level_Interface.jl
+++ b/src/_27_6_Higher-level_Interface.jl
@@ -45,7 +45,7 @@ function spline_name(spline::Ref{gsl_spline})
     output_string = output_ptr = ccall( (:gsl_spline_name, libgsl),
         Ptr{Cchar}, (Ref{gsl_spline}, ), spline )
     output_ptr==C_NULL ? throw(GSL_ERROR(8)) : output_ptr
-    bytestring(output_string)
+    unsafe_string(output_string)
 end
 
 
diff --git a/src/_31_2_Initialization.jl b/src/_31_2_Initialization.jl
index 791ff6c..d92ac1a 100644
--- a/src/_31_2_Initialization.jl
+++ b/src/_31_2_Initialization.jl
@@ -28,7 +28,7 @@ function wavelet_name(w::Ref{gsl_wavelet})
     output_string = output_ptr = ccall( (:gsl_wavelet_name, libgsl),
         Ptr{Cchar}, (Ref{gsl_wavelet}, ), w )
     output_ptr==C_NULL ? throw(GSL_ERROR(8)) : output_ptr
-    bytestring(output_string)
+    unsafe_string(output_string)
 end
 
 
diff --git a/src/_33_3_Initializing_the_Solver.jl b/src/_33_3_Initializing_the_Solver.jl
index 07e85a3..76efae8 100644
--- a/src/_33_3_Initializing_the_Solver.jl
+++ b/src/_33_3_Initializing_the_Solver.jl
@@ -96,7 +96,7 @@ function root_fsolver_name(s::Ref{gsl_root_fsolver})
     output_string = output_ptr = ccall( (:gsl_root_fsolver_name, libgsl),
         Ptr{Cchar}, (Ref{gsl_root_fsolver}, ), s )
     output_ptr==C_NULL ? throw(GSL_ERROR(8)) : output_ptr
-    bytestring(output_string)
+    unsafe_string(output_string)
 end
 
 
@@ -109,5 +109,5 @@ function root_fdfsolver_name(s::Ref{gsl_root_fdfsolver})
     output_string = output_ptr = ccall( (:gsl_root_fdfsolver_name,
         libgsl), Ptr{Cchar}, (Ref{gsl_root_fdfsolver}, ), s )
     output_ptr==C_NULL ? throw(GSL_ERROR(8)) : output_ptr
-    bytestring(output_string)
+    unsafe_string(output_string)
 end
diff --git a/src/_34_3_Initializing_the_Minimizer.jl b/src/_34_3_Initializing_the_Minimizer.jl
index c95faf5..dc6df89 100644
--- a/src/_34_3_Initializing_the_Minimizer.jl
+++ b/src/_34_3_Initializing_the_Minimizer.jl
@@ -72,5 +72,5 @@ function min_fminimizer_name(s::Ref{gsl_min_fminimizer})
     output_string = output_ptr = ccall( (:gsl_min_fminimizer_name,
         libgsl), Ptr{Cchar}, (Ref{gsl_min_fminimizer}, ), s )
     output_ptr==C_NULL ? throw(GSL_ERROR(8)) : output_ptr
-    bytestring(output_string)
+    unsafe_string(output_string)
 end
diff --git a/src/_35_2_Initializing_the_Solver.jl b/src/_35_2_Initializing_the_Solver.jl
index 89c8bff..11b2fbf 100644
--- a/src/_35_2_Initializing_the_Solver.jl
+++ b/src/_35_2_Initializing_the_Solver.jl
@@ -107,7 +107,7 @@ function multiroot_fsolver_name(s::Ref{gsl_multiroot_fsolver})
     output_string = output_ptr = ccall( (:gsl_multiroot_fsolver_name,
         libgsl), Ptr{Cchar}, (Ref{gsl_multiroot_fsolver}, ), s )
     output_ptr==C_NULL ? throw(GSL_ERROR(8)) : output_ptr
-    bytestring(output_string)
+    unsafe_string(output_string)
 end
 
 
@@ -121,5 +121,5 @@ function multiroot_fdfsolver_name(s::Ref{gsl_multiroot_fdfsolver})
     output_string = output_ptr = ccall( (:gsl_multiroot_fdfsolver_name,
         libgsl), Ptr{Cchar}, (Ref{gsl_multiroot_fdfsolver}, ), s )
     output_ptr==C_NULL ? throw(GSL_ERROR(8)) : output_ptr
-    bytestring(output_string)
+    unsafe_string(output_string)
 end
diff --git a/src/_36_3_Initializing_the_Multidimensional_Minimizer.jl b/src/_36_3_Initializing_the_Multidimensional_Minimizer.jl
index 980c39e..e16d81f 100644
--- a/src/_36_3_Initializing_the_Multidimensional_Minimizer.jl
+++ b/src/_36_3_Initializing_the_Multidimensional_Minimizer.jl
@@ -91,7 +91,7 @@ function multimin_fdfminimizer_name(s::Ref{gsl_multimin_fdfminimizer})
     output_string = output_ptr = ccall( (:gsl_multimin_fdfminimizer_name,
         libgsl), Ptr{Cchar}, (Ref{gsl_multimin_fdfminimizer}, ), s )
     output_ptr==C_NULL ? throw(GSL_ERROR(8)) : output_ptr
-    bytestring(output_string)
+    unsafe_string(output_string)
 end
 
 
@@ -105,5 +105,5 @@ function multimin_fminimizer_name(s::Ref{gsl_multimin_fminimizer})
     output_string = output_ptr = ccall( (:gsl_multimin_fminimizer_name,
         libgsl), Ptr{Cchar}, (Ref{gsl_multimin_fminimizer}, ), s )
     output_ptr==C_NULL ? throw(GSL_ERROR(8)) : output_ptr
-    bytestring(output_string)
+    unsafe_string(output_string)
 end
diff --git a/src/_38_2_Initializing_the_Solver.jl b/src/_38_2_Initializing_the_Solver.jl
index 5dbacd8..6c9430e 100644
--- a/src/_38_2_Initializing_the_Solver.jl
+++ b/src/_38_2_Initializing_the_Solver.jl
@@ -94,7 +94,7 @@ function multifit_fsolver_name(s::Ref{gsl_multifit_fsolver})
     output_string = output_ptr = ccall( (:gsl_multifit_fsolver_name,
         libgsl), Ptr{Cchar}, (Ref{gsl_multifit_fsolver}, ), s )
     output_ptr==C_NULL ? throw(GSL_ERROR(8)) : output_ptr
-    bytestring(output_string)
+    unsafe_string(output_string)
 end
 
 
@@ -107,5 +107,5 @@ function multifit_fdfsolver_name(s::Ref{gsl_multifit_fdfsolver})
     output_string = output_ptr = ccall( (:gsl_multifit_fdfsolver_name,
         libgsl), Ptr{Cchar}, (Ref{gsl_multifit_fdfsolver}, ), s )
     output_ptr==C_NULL ? throw(GSL_ERROR(8)) : output_ptr
-    bytestring(output_string)
+    unsafe_string(output_string)
 end
diff --git a/src/_3_2_Error_Codes.jl b/src/_3_2_Error_Codes.jl
index 30afd34..11857d7 100644
--- a/src/_3_2_Error_Codes.jl
+++ b/src/_3_2_Error_Codes.jl
@@ -19,6 +19,6 @@ function strerror(gsl_errno::Integer)
     output_string = output_ptr = ccall( (:gsl_strerror, libgsl),
         Ptr{Cchar}, (Cint, ), gsl_errno )
     output_ptr==C_NULL ? throw(GSL_ERROR(8)) : output_ptr
-    bytestring(output_string)
+    unsafe_string(output_string)
 end
 Compat.@dep_vectorize_1arg Number strerror